В чем разница между атомом в Common Lisp и атомом в Clojure?
Следующая страница рассказывает о том, как атомы работают в Clojure. Он не говорит о различиях между атомами в Clojure и других диалектах lisp.
В чем основное различие между атомом в Common lisp и атомом в Clojure? (Что отсутствует в определении атома в Clojure, который существует в CL?)
Ответы
Ответ 1
Атомы в Clojure и атомы в Common Lisp (и большинство других Lisps) - это две совершенно не связанные понятия. Они не имеют ничего общего друг с другом, кроме как с тем же именем.
Нет никакой "разницы". Он спрашивал, в чем разница между окном в доме и окном на экране вашего компьютера? Нецелесообразно идентифицировать различия, поскольку эти два понятия не связаны.
'Атомы' в Clojure состоянии управления.
"Атомы" в Lisp - это слово для всех типов данных, которые не являются символами cons (например, числа, символы, строки, символы,...).
В Lisp функция ATOM
просто определяется как:
(defun atom (object)
(not (consp object)))
Так как Clojure не имеет cons-ячеек и не имеет функции consp
, нельзя сказать (not (consp object))
. Таким образом, в Clojure не существует понятия Lisp, такого как "атом". Обратите внимание, что Clojure имеет функцию cons
, но не создает cons-ячейки, как в Lisp.
Ответ 2
Они в значительной степени отличаются и имеют общую концептуальную основу для использования имени "Atom"
-
Атом в Common lisp относится к идее неделимой вещи, как оригинальное значение атома материи.
-
Атом в clojure относится к определенной изменяемой структуре данных, которая изменяет "атомарно" , которая является записью к ней, либо завершается, либо не выполняется (и впоследствии повторится)
общая идея - это нераздельное понятие. в CL это то, что есть, и в clojure его как вещь меняется.
В clojure Атомы используются, когда вам нужно блокировать изменяемые данные, которые не скоординированы. например, один счетчик userId или что-то еще. clojure также скоординировал измененный доступ в Refs (думаю, банковские переводы счетов) и атомные нескоординированные неблокирующие изменяемые вещи в агентах (например, сборщики журналов ошибок).
Ответ 3
Во всех Lisps атомах символические выражения, которые не являются списками (кроме пустых списков). Они также называются <сильными > атомными S-выражениями. Какой атомный (неделимый) в нем? Исторически списки были чем-то, что можно было бы разделить на более мелкие части, где атомы (но не непустые списки), содержащиеся в них, не могли.
В Clojure есть также атомные S-выражения, но есть также структура данных, называемая Atom, которая позволяет создавать изменяемые объекты данных, к которым можно получить доступ несколькими потоками. Какой атомный в них? Операция .
Если вы измените Atom, его состояние будет успешно изменено или нет. Не будет ситуации, когда половина ее (например, какой-то вектор) изменится, а половина - нет. Если операция не увенчалась успехом, она повторится, и текущий поток ждет, пока он не завершится.
В чем разница между атомами Lisp и Clojure атомами? Уровень абстракции. Lisp атомы - это класс символических выражений, тогда как Clojure Атомы - это класс структур данных, используемых для обработки общих данных.