Hier ist ein historischer Hinweis (ich bin noch nicht geboren, als die beschriebenen Ereignisse stattfanden, also korrigiert mich vielleicht jemand, der mehr über mich weiß. All dies ist auf das Lesen alter Artikel und einiger Bücher zurückzuführen).
Nachdem auf den Haftungsausschluss verzichtet wurde, scheint es, als sei "symbolisch" in den Tagen von Fortran vs Lisp eine Art Modewort gewesen, wie es "objektorientiert" heute ist. Das heißt, Programme wurden in der Regel nur als riesige mathematische Formeln betrachtet, bei denen die Zahlen irgendwann eingefügt werden und die Platzhalter für Zahlen unerheblich sind. Alle in einem Programm enthaltenen symbolischen Informationen würden verschwinden, sobald dieses Programm entweder ausgeführt, kompiliert oder interpretiert wird. Die Neuheit von Lisp war, dass Symbole in einem Programm bestehen bleiben konnten, selbst nachdem es ausgeführt, kompiliert oder interpretiert wurde. Dies inspirierte eine Terminologie wie "symbolische Algebra" (wie bei der Manipulation algebraischer Formeln auf Papier / Tafel anstatt durch direkte Berechnung). Um dies (und andere symbolische Dinge) zu unterstützen, sollten Symbole mit einem Namen und einigen Eigenschaften versehen werden. Aus nicht-symbolischer Sicht könnte man sagen, dass "Symbole nur benannte Zeiger" sind, und obwohl dies nicht der Fall ist, sind sie eher Zeiger auf Strukturen, aber aus praktischen Gründen sind Symbole Bezeichner der Linken Seite eines Variablen-Wert-Paares. Dies macht es auch möglich zu sehensymbol-value
Funktion als Zeiger-Dereferenzierung in nicht-symbolischen Sprachen.
Moderne Lisps unterscheiden sich darin, wie viele Werte einem Symbol zugeordnet werden können. (Angenommen, Sie hatten eine nicht-symbolische Sprache mit mehreren Speicherstapeln / -haufen. Sie könnten sich eine Situation vorstellen, in der der gleiche Zeiger eine Bedeutung hat, wenn er im Kontext verschiedener Stapel interpretiert wird.) Haufen). So haben Lisp2-Sprachen (Emacs Lisp ist eine solche Sprache) einen separaten Speicher für Funktionen und Variablen. Deshalb gibt es auch einen symbol-function
, der "einen Zeiger dereferenziert, der auf einen Funktionsspeicher verweist". Schema hat diesen speziellen Speicher nicht und Clojure AFAIK hat weder das noch symbol-plist
.