clojure scheme common-lisp symbols

clojure - ¿Cuál es la diferencia entre un átomo y un símbolo en Common Lisp?



scheme common-lisp (4)

¿Hay alguna diferencia entre lo que en Common Lisp llamaría un átomo y un símbolo?

¿Estas diferencias se extienden a otros idiomas en la familia Lisp?

(Soy consciente de que el átomo tiene un significado diferente en Clojure, pero estoy interesado en los límites de lo que es un símbolo).


''átomo'' se ve generalmente en el procesamiento de listas. En Common Lisp, algo es una lista no vacía o un átomo. Anteriormente, un átomo también se llamaba ''símbolo atómico'', que es algo ligeramente diferente. Ahora, en Common Lisp, los átomos no son solo símbolos, sino todo lo que no es una celda de contras (ejemplos: cadenas, números, tablas hash, flujos, ...).

Si algo no es un átomo (es una desventaja), se pueden usar las operaciones CAR, CDR, FIRST y REST.

Así que el átomo es un grupo de estructura de datos. Un símbolo es una cierta estructura de datos, que también es un átomo.


En Common Lisp, el átomo se define precisamente como cualquier objeto que no sea un contras. Vea http://l1sp.org/cl/atom para más detalles.

No sé de otros idiomas en la familia Lisp.


En Common Lisp, un símbolo es muy parecido a una variable en otros idiomas, aunque es más pesado (no es solo una pieza de memoria en blanco lo suficientemente grande como para contener un valor). Por lo general, está intern por lo que puede ser referenciado por su nombre, aunque es posible tener símbolos anónimos (como la memoria en C a la que puede referirse solo con el puntero).

Un átomo es un valor que no es una célula contraria. Un símbolo es un átomo, y también lo es un número, una cadena y muchas otras cosas. El uso más común de las celdas de cons es en la creación de listas, aunque es posible usarlas de otras maneras.


En Esquema, un átomo es cualquier cosa que no sea un par:

> (pair? 1) #f > (pair? ''(1 2 3)) #t > (pair? ''a) #f

Así, los símbolos son átomos, al igual que los números y las cadenas. atom tiene una definición similar en Common Lisp, donde la función (atom object) se define como (not (consp object)) .