В чем разница между атомом и символом в Common Lisp? - PullRequest
16 голосов
/ 04 октября 2010

Есть ли различия между тем, что в Common Lisp вы бы назвали атомом, и символом?

Распространяются ли эти различия на другие языки в семействе Lisp?

(Я знаю, что атом имеет другое значение в Clojure, но меня интересуют границы того, что является символом.)

Ответы [ 4 ]

14 голосов
/ 04 октября 2010

В Common Lisp atom точно определяется как любой объект, который не является минусом.См. http://l1sp.org/cl/atom для получения более подробной информации.

Я не знаю других языков в семействе Lisp.

6 голосов
/ 05 октября 2010

'atom' обычно виден при обработке списка. В Common Lisp что-то является непустым списком или атомом. В прежние времена атом также называли «символом атома», что немного отличается. Теперь в Common Lisp атомы - это не только символы, но и все остальное, что не является конс-ячейкой (примеры: строки, числа, хеш-таблицы, потоки, ...).

Если что-то не является атомом (является минусом), могут использоваться операции CAR, CDR, FIRST и REST.

Итак, атом - это группа структур данных. Символ - это определенная структура данных, которая также является атомом.

1 голос
/ 04 октября 2010

В схеме атом - это все, что не является парой:

> (pair? 1)
#f
> (pair? '(1 2 3))
#t
> (pair? 'a)
#f

Таким образом, символы - это атомы, так же как числа и строки. Атом имеет аналогичное определение в Common Lisp, где функция (atom object) определена как (not (consp object)).

0 голосов
/ 04 октября 2010

В Common Lisp символ очень похож на переменную в других языках, хотя и более тяжелый (это не просто пустой кусок памяти, достаточно большой, чтобы содержать значение).Обычно это intern ed, поэтому на него можно ссылаться по имени, хотя возможно иметь анонимные символы (во многом как память в C, на которую вы можете ссылаться только по указателю).

Атом - это некоторое значение, котороене является ячейкой cons.Символ - это атом, а также число, строка и многое другое.Чаще всего ячейки cons используются при составлении списков, хотя их можно использовать и другими способами.

...