首页 > 解决方案 > 关于 eq 的 Scheme 和 R5RS 问题

问题描述

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

这是如何工作的?谢谢。

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

标签: schemer5rs

解决方案


只有一个空列表,因此所有引用该列表的用法都()指向该列表,并且是eq?针对其自身的。存储模型的方案规范描述说:

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

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

obj 1obj 2都是空列表

但是,当您创建一个非空列表时,它每次都会创建一个新列表,eq?即使它们包含相同的元素,它们也不会相互关联。


推荐阅读