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

时间:2010-10-04 12:13:53

标签: clojure scheme common-lisp symbols

您在称为原子的Common Lisp和符号之间有什么区别吗?

这些差异是否扩展到Lisp系列中的其他语言?

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

4 个答案:

答案 0 :(得分:14)

在Common Lisp中, atom 被精确定义为任何不是缺点的对象。有关详细信息,请参阅http://l1sp.org/cl/atom

我不了解Lisp系列中的其他语言。

答案 1 :(得分:6)

'atom'通常可以从列表处理中看到。在Common Lisp中,某些东西要么是非空列表,要么是原子。在过去,原子也被称为“原子符号”,这是一个略有不同的东西。现在Common Lisp中的原子不仅是符号,还有其他不是cons单元的东西(例如:字符串,数字,哈希表,流......)。

如果某个东西不是原子(是一个缺点),可以使用CAR,CDR,FIRST和REST操作。

所以原子是一组数据结构。符号是某种数据结构,也恰好是原子。

答案 2 :(得分:1)

在Scheme中,原子是任何不是一对的原子:

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

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

答案 3 :(得分:0)

在Common Lisp中,符号非常类似于其他语言中的变量,虽然更重量级(它不仅仅是一块足以保存值的空白内存)。它通常是intern,所以它可以通过名称引用,虽然它可以有匿名符号(很像C中的内存,你可能只能用指针引用)。

原子是一个不是cons单元格的值。符号是一个原子,数字,字符串和许多其他东西也是如此。 cons单元格最常见的用途是组成列表,尽管可以通过其他方式使用它们。