Aqui está um pouco de referência histórica (eu ainda não nasci quando os eventos descritos ocorreram, talvez alguém com mais conhecimento me corrija. Tudo isso é através da leitura de artigos antigos e de alguns livros).
Tendo dispensado o aviso de isenção, parece que nos dias de Fortran vs Lisp "simbólico" era uma espécie de chavão como o "orientado a objetos" é hoje. Ou seja, os programas costumavam ser vistos apenas como grandes fórmulas matemáticas, onde os números acabariam sendo conectados e os espaços reservados para os números eram irrelevantes. Todas as informações simbólicas contidas em um programa desapareceriam assim que esse programa fosse executado, compilado ou interpretado. A novidade do Lisp era que ele permitia que os símbolos persistissem em um programa mesmo depois de executado, compilado ou interpretado. Isso inspirou uma terminologia como "álgebra simbólica" (como na manipulação de fórmulas algébricas feitas no papel / quadro-negro, e não no cálculo direto). Para apoiar isso (e outras coisas simbólicas), os símbolos deveriam ser equipados com um nome e algumas propriedades. De um ponto de vista não simbólico, pode-se dizer que "os símbolos são apenas nomeados ponteiros" e, embora isso não seja verdade, eles são mais indicadores de estruturas, mas, para fins práticos, os símbolos são designadores da esquerda lado de um par de valor variável. Isso também permite versymbol-value
funciona como desreferenciamento de ponteiro em idiomas não simbólicos.
Os Lisps modernos variam na medida em que valores podem ser associados a um símbolo (suponha que você tenha uma linguagem não simbólica com várias pilhas / pilhas de memória, você pode imaginar uma situação em que o mesmo ponteiro tenha significado quando interpretado no contexto de pilhas diferentes / montões). Portanto, as linguagens Lisp2 (o Emacs Lisp é uma dessas linguagens) têm armazenamento separado para funções e variáveis, é por isso que também existe um symbol-function
, que "desreferencia um ponteiro apontando para um armazenamento de funções". O esquema não possui esse armazenamento especial e o Clojure AFAIK, não possui nem isso nem symbol-plist
.