Oto trochę odniesień historycznych (jeszcze się nie urodziłem, kiedy miały miejsce opisane wydarzenia, więc może ktoś bardziej kompetentny mnie poprawi. Wszystko po przeczytaniu starych artykułów i niektórych książek).
Po rezygnacji z wyłączenia odpowiedzialności wydaje się, że w czasach Fortran kontra Lisp „symboliczne” było rodzajem modnego hasła, jakim jest dzisiaj „obiektowe”. Tj. Programy były zwykle postrzegane jako po prostu ogromne formuły matematyczne, w których liczby zostaną w końcu podłączone, a symbole zastępcze dla liczb były nieistotne. Wszystkie informacje symboliczne zawarte w programie znikną, gdy tylko program zostanie uruchomiony, skompilowany lub zinterpretowany. Nowością Lisp było to, że pozwalało na zachowanie symboli w programie nawet po jego uruchomieniu, kompilacji lub interpretacji. To zainspirowało taką terminologię, jak „algebra symboliczna” (jak w przypadku manipulacji formułami algebraicznymi wykonywanymi na papierze / tablicy, a nie przez bezpośrednie obliczenia). Aby wesprzeć to (i inne symboliczne rzeczy) symbole miały być wyposażone w nazwę i niektóre właściwości. Z nie-symbolicznego punktu widzenia można powiedzieć, że „symbole są po prostu nazwanymi wskaźnikami”, i chociaż nie jest to prawdą, jeśli w ogóle są bardziej wskaźnikami do struktur, ale dla celów praktycznych symbole są desygnatorami lewej strona strony pary o zmiennej wartości. Pozwala to również zobaczyćsymbol-value
działają jako dereferencje wskaźnika w językach innych niż symboliczne.
Współczesne Lisps różnią się tym, ile wartości można skojarzyć z jednym symbolem (załóżmy, że masz nie-symboliczny język z wieloma stosami / stosami pamięci, możesz sobie wyobrazić sytuację, w której ten sam wskaźnik ma znaczenie, gdy jest interpretowany w kontekście różnych stosów / hałdy). Tak więc języki Lisp2 (Emacs Lisp jest jednym z takich języków) mają osobne miejsce na funkcje i zmienne, dlatego też istnieje również „ symbol-function
, który„ odznacza wskaźnik wskazujący miejsce na funkcję ”. Schemat nie ma tego specjalnego miejsca do przechowywania, a Clojure AFAIK, nie ma ani tego, ani symbol-plist
.