otherwise else clojure

otherwise - ¿Por qué es: else no(else) en clojure?



else clojure (4)

Creo que (else 5) es menos consistente. (cond ...) argumentos se expresan como pares de condición - valor. :else value es consistente porque :else es solo una convención, funciona porque :else es solo una expresión que siempre es verdadera. No hay reglas especiales para :else .

En Clojure puedes escribir:

(cond (= 1 2) 1 :else 5)

En Esquema el equivalente sería:

(cond ((= 1 2) 1) (else 5))

La sintaxis :else 5 no es tan consistente como la (else 5) . ¿Cuál es la razón por la que la sintaxis de otro tipo se implementa de esta manera aparentemente inconsistente en Clojure?


El 99% de las veces, los parámetros en Clojure implican una función o una macro llamada. Esto está en contraste con algunos otros Lisps que usan parens para agrupar. En Clojure, si es necesario agrupar, por ejemplo, en fn o let enlaces, usará [] lugar.

Rich analiza parte del razonamiento detrás de hacer este cambio en una entrevista reciente here . En resumen, ayuda a hacer que el código sea más legible de inmediato, ya que no tiene que perder tiempo para averiguar qué representan los parens.


Hay muchas razones; Principalmente creo que es porque cond se implementa como una macro alrededor de if . Por otro lado, en Scheme else es solo un sinónimo de t en este contexto; no es una llamada de función, entonces ¿por qué hacer que se vea como una?


:else es un truco realmente inteligente aquí:

  • cond espera pares de condición / valor - y: else es solo un valor que es "verdadero" en Clojure, por lo que garantiza que se cumpla la condición. (Cualquier cosa excepto nula o falsa cuenta como "verdad"). También puede utilizar ": burro" como un valor de condición verdadero garantizado si lo desea.
  • Sin embargo, else también transmite significado a un lector humano (es decir, esta condición es la que debe ejecutarse si ninguna de las otras condiciones coincide)

Así que realmente es solo una convención que funciona en expresiones de cond y es significativa para los lectores humanos.