Ответ 1
В Common Lisp атом точно определяется как любой объект, который не является минусом. Подробнее см. http://l1sp.org/cl/atom.
Я не знаю о других языках в семействе Lisp.
Существуют ли какие-либо различия между тем, что в Common Lisp вы называете атомом, и символом?
Связаны ли эти различия с другими языками семейства Lisp?
(Я знаю, что атом имеет другое значение в Clojure, но меня интересуют границы того, что является символом.)
В Common Lisp атом точно определяется как любой объект, который не является минусом. Подробнее см. http://l1sp.org/cl/atom.
Я не знаю о других языках в семействе Lisp.
'atom' обычно рассматривается из обработки списка. В Common Lisp что-то является либо непустым списком, либо атомом. В прежние времена атом также назывался "атомным символом", что несколько отличается. Теперь в Common Lisp атомы представляют собой не только символы, но и все остальное, что не является ячейкой cons (примеры: строки, числа, хэш-таблицы, потоки,...).
Если что-то не является атомом (это минус), могут использоваться операции CAR, CDR, FIRST и REST.
Итак, атом - это группа структуры данных. Символ - это определенная структура данных, которая также является атомом.
В Схеме атом - это все, что не является парой:
> (pair? 1)
#f
> (pair? '(1 2 3))
#t
> (pair? 'a)
#f
Таким образом, символы - это атомы, как числа и строки. атом имеет аналогичное определение в Common Lisp, где функция (atom object)
определяется как (not (consp object))
.
В Common Lisp символ очень похож на переменную на других языках, хотя и более тяжеловесный (это не просто пустой кусок памяти, достаточно большой для хранения значения). Обычно это intern
ed, поэтому на него можно ссылаться по имени, хотя возможно иметь анонимные символы (подобно памяти в C, на которую вы можете ссылаться только указателем).
Атом - это некоторое значение, которое не является ячейкой cons
. Символ - это атом, а также число, строка и многое другое. Наиболее частое использование ячеек cons
заключается в составлении списков, хотя их можно использовать другими способами.