[英]Scheme and R5RS questions about eq
你能解释为什么第一个是假的,第二个是真的吗?
这是如何运作的? 谢谢。
(eq? '(1 2 3) '(1 2 3)) ;False
(eq? '() '()) ;True
只有一个空列表,所以()
所有用法都是指那个列表,它是eq?
给自己。 存储模型的方案规范描述说:
尽管如此,可以理解的是,空列表不能重新分配,因为它是唯一的对象。
和eqv?
的规格eqv?
(由eq?
描述引用)说两个对象是等价的,如果
obj 1和obj 2都是空列表
但是当您创建一个非空列表时,它每次都会创建一个新列表,并且它们不是eq?
即使它们包含相同的元素。
引用自TSPL3 :
[..] 如果两个对象在内部由相同的指针值表示,则认为它们是相同的 [..] 空列表 () 无论出现在何处都与其自身相同。 [..] 由 cons、vector、string 等的不同应用创建的两对、vector 或 strings 是不同的。
如果你改写
(let ((x '(1 2 3)))
(eq? x x))
它将是#t
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.