Nunca pensé en esto hasta que le expliqué algún código de clojure a un compañero de trabajo que no estaba familiarizado con Clojure. Le estaba explicando let
cuando le preguntó por qué usa un vector para declarar los enlaces en lugar de una lista. Realmente no tenía una respuesta para él. Pero el lenguaje no restringir su uso listas:¿Por qué se requiere un vector?
=> (let (x 1) x)
java.lang.IllegalArgumentException: let requires a vector for its binding (NO_SOURCE_FILE:0)
¿Por qué es esto?
Imagino que es puramente legible, y al permitir el uso de un vector simplemente asegura que se mantenga el idioma. – MayDaniel
(Se necesita un vector literal para casi todas las macros "dejar" y "con-") – MayDaniel
Esto es como leyes naturales. Puedes razonar * que * es así, pero no * por qué *.Si la verdadera razón para esta decisión fue la legibilidad, alguna implementación del Esquema, una convención o el tipo de desayuno que Rich tuvo en ese día permanece en la oscuridad. El único que puede responder esto es el propio Rich. Para Clojure estamos en una posición afortunada, para el universo ... – kotarak