为什么这两个不相等?

Xze*_*non 3 scheme racket

我正准备进行测试,我注意到了这个问题:

Define an object x so that (eq? (car x) (cdr x)) returns #t
Run Code Online (Sandbox Code Playgroud)

我最初认为这很简单.cdr x是一个列表,car x是一个单独的元素,所以我的猜测是将x中的第一个元素作为一个等于x的尾部的列表.所以我想出来了

(define x (list (list 1) 1))
Run Code Online (Sandbox Code Playgroud)

调用car x在DrRacket结果(list 1)也是如此cdr x,但是当我尝试调用(eq? (car x) (cdr x))的结果是#F.

我到底错过了什么?那么正确的答案是什么?

Wil*_*ess 7

我们可以得到的东西carcdr是不是一个列表.这是一.

使用cons例如:创建对:

(define val (list 1))

(define val-pair (cons val val))
Run Code Online (Sandbox Code Playgroud)

(list (list 1) 1),另一方面,等价于(cons (list 1) (list 1)),其中 list被称为两次每次,返回在存储器中的新的,单独的对象,虽然保持相等的值.但eq?只对同一个内存对象返回true .

因此,虽然你的思维是合理的,价值方面的,但这里实际比较的不是价值而是相同,就像记忆对象的"指针等式"一样.