Aquí hay un poco de referencia histórica (no he nacido aún cuando ocurrieron los eventos descritos, así que tal vez alguien más conocedor me corrija. Todo esto es de leer artículos viejos y algunos libros).
Habiendo prescindido del descargo de responsabilidad, parece que en los días de Fortran vs Lisp "simbólico" era una especie de palabra de moda como "orientado a objetos" es hoy. Es decir, los programas se veían típicamente como enormes fórmulas matemáticas en las que los números eventualmente se conectarían y los marcadores de posición para los números eran irrelevantes. Toda la información simbólica contenida en un programa desaparecerá tan pronto como se ejecute, compile o interprete. La novedad de Lisp era que permitía que los símbolos persistieran en un programa incluso después de ejecutarse, compilarse o interpretarse. Esto inspiró una terminología como "álgebra simbólica" (como en la manipulación de fórmulas algebraicas como se hace en papel / pizarra en lugar de por cálculo directo). Para respaldar esto (y otras cosas simbólicas), los símbolos debían estar equipados con un nombre y algunas propiedades. Desde un punto de vista no simbólico, se podría decir que "los símbolos son simplemente punteros nombrados", y si bien esto no es cierto, en todo caso son más punteros a estructuras, pero a efectos prácticos, los símbolos son designadores de la izquierda lado de la mano de un par de valores variables. Esto también hace posible versymbol-value
funcionan como referencia de puntero en lenguajes no simbólicos.
Los Lisps modernos varían en cuanto a la cantidad de valores que se pueden asociar con un símbolo (supongamos que tiene un lenguaje no simbólico con múltiples pilas / montones de memoria, podría imaginar una situación en la que el mismo puntero tiene significado cuando se interpreta en el contexto de diferentes pilas / muchísimo). Entonces, los lenguajes Lisp2 (Emacs Lisp es uno de esos lenguajes) tienen un almacenamiento separado para funciones y variables, es por eso que también hay un symbol-function
, que "hace referencia a un puntero que apunta a un almacenamiento de funciones". Scheme no tiene este almacenamiento especial y Clojure AFAIK, no tiene ni eso ni eso symbol-plist
.