Ось трохи історичної довідки (я ще не народився, коли відбувалися описані події, тому, можливо, хтось більш обізнаний мене виправить. Все це - від читання старих статей та деяких книг).
Відмовившись від відмови від відповідальності, здається, що ще в часи Фортран проти Ліспа "символічний" був своєрідним модним словом, оскільки "об'єктно орієнтований" є сьогодні. Тобто програми, як правило, розглядаються як просто величезні математичні формули, де в кінцевому підсумку будуть підключені числа, а місця заповнення чисел не мають значення. Вся символічна інформація, що міститься в програмі, буде зникати, як тільки ця програма була запущена, складена або інтерпретована. Новинка Лісп полягала в тому, що вона дозволяла символам зберігатися в програмі навіть після її запуску, складання чи інтерпретації. Це надихнуло таку термінологію, як "символічна алгебра" (як при маніпулюванні алгебраїчними формулами, як це робиться на папері / дошці, а не шляхом прямого обчислення). Для підтримки цієї (та інших символічних речей) символи мали бути обладнані іменем та деякими властивостями. З несимволічної точки зору, можна сказати, що "символи називаються лише вказівниками", і хоча це неправда, якщо що-небудь, то вони більше є вказівниками на структури, але для практичних цілей символи є позначеннями зліва сторона пари змінної величини. Це також дає можливість побачитиsymbol-value
функціонувати як перенаправлення покажчика в несимволічних мовах.
Сучасні Lisps відрізняються тим, скільки значень може бути пов'язано з одним символом (припустимо, у вас була несимволічна мова з кількома стеками / купими пам'яті, ви можете уявити ситуацію, коли той самий покажчик має значення, коли його інтерпретують у контексті різних стеків / купи). Отже, мови Lisp2 (одна з таких мов Emacs Lisp) мають окреме сховище для функцій та змінних, тому існує також і a symbol-function
, який "перенаправляє покажчик, що вказує на сховище функції". Схема не має цього спеціального сховища, а Clojure AFAIK не має ні того, ні symbol-plist
.