2012-07-13 9 views
11

acabo de comenzar con Clojure. Estoy leyendo this. No entendí la diferencia entre cómo se implementan los formularios especiales y cómo se implementan las funciones y las macros donde diceClojure: diferencia entre cómo se implementan formularios, funciones y macros especiales

Casi todas las funciones y macros se implementan en el código fuente de Clojure. Las diferencias entre funciones y macros se explican más adelante. Los formularios especiales son reconocidos por el compilador Clojure y no implementados en el código fuente de Clojure.

¿Alguien puede explicar la diferencia entre dos cosas? (Implementado en el código fuente Clojure y no implementa en código fuente Clojure)

+0

Los formularios especiales son análogos a palabras clave como "si" en otros idiomas. – Cubic

Respuesta

6

implementa en código fuente Clojure

El código para la función especial/abstracción se implementa en el lenguaje en sí clojure es decir en .clj archivo.

No implementado en el código fuente clojure

Se implementa en código Java.

Echa un vistazo al código de Clojure en github y verás que hay código Java y clojure.

2

tal vez una más útil, desde mi perspectiva, forma de expresarlo sería:

formas especiales son las partes de la lengua que, si someon los llevó lejos de ti, que no sería capaz de reemplazar ellos, y tendrían que recuperarlos por otros medios.

por ejemplo, si alguien retira cond podría escribir su propio macro cond (es sólo una envoltura alrededor de si. Si alguien quite si ... que tendría que desembolsar el idioma y poner de nuevo.

+1

No creo que esta definición sea útil ni precisa.Por ejemplo, 'let' se puede implementar como una macro encima de' fn', pero eso no significa que 'let' no sea una forma especial (ignore aquí que' let' es en realidad una macro encima de la especial forma 'let *'). Y como muestran las publicaciones como [Programando sin nada] (http://experthuman.com/programming-with-nothing), realmente la única forma especial que * necesita * es la función. – amalloy

+0

¿Pero la respuesta de @Arthur Ulfeldt está en el espíritu de Clojure? Tal vez él enderezaría las partes inexactas. – octopusgrabbus

0

Special forms son . bloques de clojure primitivos básicos de computación, en la parte superior de los cuales se construye todo el resto de Clojure

Functions son valores de primera clase en Clojure, la creación de ellos cae a la forma especial fn

1

Además de una cita de. libro Clojure Programming por Chas Emerick, que creo que fue muy útil para entender las formas especiales de Clojure. :]

Las formas especiales son los bloques de construcción primitivos de Clojure, sobre los cuales se construye todo el resto de Clojure.

Todo lo que no es una forma especial se implementa en Clojure mediante el arranque de ese conjunto limitado de operaciones primitivas.

De hecho, si estaba tan motivado, podría implementar Clojure (u otro idioma de su elección) desde cero, por su cuenta, en la parte superior de los formularios especiales de Clojure.

Cuestiones relacionadas