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

Следующая страница говорит о том, как работают атомы в Clojure.Это не говорит много о различиях между атомами в Clojure и других диалектах lisp.

Какая основная разница между атомом в Common Lisp и атомом в Clojure?(Чего не хватает в определении атома в Clojure, которое существует в CL?)

Ответы [ 3 ]

19 голосов
/ 08 сентября 2010

Атомы в Clojure и атомы в Common Lisp (и большинстве других Lisp) - это две совершенно не связанные концепции. Они не имеют ничего общего друг с другом, кроме того, что имеют одно и то же имя.

Разницы нет. Было бы спросить, в чем разница между окном в доме и окном на экране вашего компьютера? Различать различия не имеет смысла, поскольку эти два понятия не связаны.

«Атомы» в Clojure управляют состоянием.

«Атомы» в Лиспе - это слово для всех типов данных, которые не являются консолидированными ячейками (например, числа, символы, строки, символы, ...).

В Лиспе функция ATOM просто определяется как:

(defun atom (object)
   (not (consp object)))

Так как Clojure не имеет cons-ячеек и не имеет функции consp, невозможно сказать (not (consp object)). Таким образом, в Clojure не существует понятия Lisp, такого как «атом». Обратите внимание, что Clojure имеет функцию cons, но она не создает cons-ячейки как в Lisp.

1 голос
/ 09 сентября 2010

Они в значительной степени различны и имеют общую концептуальную основу для использования имени «Атом»

  • Атом в Common lisp относится к идее неделимой вещи , подобной первоначальному значению атома материи.

  • Atom in clojure относится к определенной изменяемой структуре данных, которая изменяет «атомарно» , то есть запись в нее либо завершается, либо не выполняется (и впоследствии повторяется)

общая идея - неделимая концепция. в CL - что это за вещь, а в Clojure - как она меняется.

В Clojure Atoms используются, когда вам нужно заблокировать изменяемые данные, которые не скоординированы. например один счетчик userId или что-то. Clojure также координировал изменяемый доступ в Refs (например, переводы с банковского счета) и атомарные несогласованные неблокирующие изменяемые объекты в агентах (например, например, сборщики журналов).

0 голосов
/ 27 октября 2014

Во всех Лиспах атомы являются символическими выражениями , которые не являются списками (кроме пустых списков).Их также называют атомными S-выражениями .Что в нем атомного (неделимого)?Исторически списки были чем-то, что можно было разделить на более мелкие части, в которых атомы (но не непустые списки), содержащиеся в них, не могли.структура под названием Atom , которая позволяет создавать изменяемые объекты данных, к которым могут обращаться несколько потоков.Что в них атомного?Операция .

Если вы измените атом, его состояние будет успешно изменено или нет.Не будет ситуации, когда половина этого (например, некоторый вектор) изменится, а половина - нет.Если операция не удалась, то она повторяется, и текущий поток ожидает ее завершения.

В чем разница между атомами Лиспа и атомами Clojure?Уровень абстракции.Атомы Лиспа - это класс символических выражений, тогда как атомы Clojure - это класс структур данных, используемых для обработки общих данных.

...