代码之家  ›  专栏  ›  技术社区  ›  hawkeye

Common Lisp中的原子和Clojure中的原子有什么区别?

  •  14
  • hawkeye  · 技术社区  · 14 年前

    以下 page 讨论原子如何在Clojure中工作。它并没有说明Clojure和其他lisp方言中原子之间的差异。

    Common Lisp中的原子和Clojure中的原子之间的主要区别是什么?(CL中存在的Clojure中的原子定义缺少什么?)

    3 回复  |  直到 7 年前
        1
  •  20
  •   Rainer Joswig mmmmmm    11 年前

    没有“区别”。它会问你家里的窗户和你电脑屏幕上的窗户有什么区别?因为这两个概念并不相关,所以找出差异是没有意义的。

    在Lisp中 ATOM

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

    因为Clojure没有cons细胞也没有功能 consp ,这是不可能说的 (not (consp object)) . 因此,Clojure中不存在类似“atom”这样的Lisp概念。注意Clojure有一个函数 cons ,但它不会像Lisp中那样创建cons单元格。

        2
  •  1
  •   Arthur Ulfeldt    14 年前

    • Atom在commonlisp中是指 不可分割的东西 就像物质原子的原始含义。

    • 改变“原子性”

    共同的想法是不可分割的概念。在CL中,事物是什么,在CLUJURE中,事物是如何变化的。

    在Clojure中,当需要阻塞不协调的可变数据时,使用原子。比如一个用户标识计数器之类的。Clojure在Refs中还具有协调的可变访问(比如银行账户转账)和代理中的原子不协调的非阻塞可变内容(比如日志收集器)。

        3
  •  0
  •   siefca    9 年前

    所有口齿不清 符号表达式 (空列表除外)。它们也被称为 原子S-表达式

    Clojure中也有原子S表达式,但也有一种称为 原子 它允许创建可由多个线程访问的可变数据对象。它们里面有什么原子?这个 操作 .

    如果你修改一个原子,它的状态是否会被成功地改变。不会出现一半(例如某个向量)会改变一半不会改变的情况。如果操作不成功,则会重试该操作,当前线程将等待该操作完成。