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

在commonlisp中,原子和符号有什么区别?

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

    在CommonLisp中,你所说的原子和符号之间有什么区别吗?

    (我知道atom在Clojure中有不同的含义,但我对符号的边界感兴趣。)

    4 回复  |  直到 8 年前
        1
  •  15
  •   Xach    14 年前

    在Common Lisp中, http://l1sp.org/cl/atom 更多细节。

        2
  •  6
  •   Rainer Joswig mmmmmm    14 年前

    “atom”通常从列表处理中看到。在公共Lisp中,有些东西要么是非空列表,要么是atom。在以前,一个原子也被称为“原子符号”,这是稍有不同的东西。现在,在普通的Lisp中,原子不仅仅是符号,而且是所有其他不是cons单元的东西(例如:字符串、数字、哈希表、流等等)。

    如果某物不是原子(是一个cons),那么可以使用操作CAR、CDR、FIRST和REST。

    所以原子是一组数据结构。符号是一种特定的数据结构,它恰好也是一个原子。

        3
  •  1
  •   Vijay Mathew Chor-ming Lung    14 年前

    在这个方案中,一个原子是不是一对的任何东西:

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

    因此符号是原子,就像数字和字符串一样。atom在commonlisp中有类似的定义,其中 (atom object) (not (consp object))

        4
  •  0
  •   David Thornley    14 年前

    在CommonLisp中,符号非常类似于其他语言中的变量,尽管更重(它不仅仅是一块足够大的空白内存来容纳一个值)。通常是这样 intern 所以它可以被名称引用,尽管也可能有匿名符号(很像C中的内存,您可能只通过指针引用)。

    一个原子是一个不是原子的值 cons 牢房。一个符号就是一个原子,一个数字,一个字符串,还有很多其他的东西。最常用的 单元格是组成列表的一部分,尽管可以用其他方式使用它们。