繁体   English   中英

关于 eq 的 Scheme 和 R5RS 问题

[英]Scheme and R5RS questions about eq

你能解释为什么第一个是假的,第二个是真的吗?

这是如何运作的? 谢谢。

(eq? '(1 2 3) '(1 2 3)) ;False
(eq? '() '()) ;True

只有一个空列表,所以()所有用法都是指那个列表,它是eq? 给自己。 存储模型的方案规范描述说:

尽管如此,可以理解的是,空列表不能重新分配,因为它是唯一的对象。

eqv?的规格eqv? (由eq?描述引用)说两个对象是等价的,如果

obj 1obj 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM