您在称为原子的Common Lisp和符号之间有什么区别吗?
这些差异是否扩展到Lisp系列中的其他语言?
(我知道原子在Clojure中有不同的含义,但我对符号的边界感兴趣。)
答案 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
单元格最常见的用途是组成列表,尽管可以通过其他方式使用它们。