В чем разница между атомом в 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 Атомы - это класс структур данных, используемых для обработки общих данных.