关于eq的Scheme和R5RS问题
Scheme and R5RS questions about eq
你能解释一下为什么第一个是假的而第二个是真的吗?
这是如何运作的?谢谢
(eq? '(1 2 3) '(1 2 3)) ;False
(eq? '() '()) ;True
只有一个空列表,所以 ()
的所有使用都指的是该列表,eq?
指的是它本身。 Scheme Specification 存储模型的描述说:
Notwithstanding this, it is understood that the empty list cannot be
newly allocated, because it is a unique object.
和 eqv?
的规范(由 eq?
描述引用)说如果
两个对象是等价的
obj1 and obj2 are both the empty list
但是,当您创建一个非空列表时,它每次都会创建一个新列表,并且即使它们包含相同的元素,它们也不会 eq?
彼此。
引自TSPL3:
[..] Two objects are considered identical if they are represented internally by the same pointer value
[..] The empty list () is identical to itself wherever it appears.
[..] Two pairs, vectors, or strings created by different applications of cons, vector, string, etc., are distinct.
如果你改写
(let ((x '(1 2 3)))
(eq? x x))
它将是#t
。
你能解释一下为什么第一个是假的而第二个是真的吗?
这是如何运作的?谢谢
(eq? '(1 2 3) '(1 2 3)) ;False
(eq? '() '()) ;True
只有一个空列表,所以 ()
的所有使用都指的是该列表,eq?
指的是它本身。 Scheme Specification 存储模型的描述说:
Notwithstanding this, it is understood that the empty list cannot be newly allocated, because it is a unique object.
和 eqv?
的规范(由 eq?
描述引用)说如果
obj1 and obj2 are both the empty list
但是,当您创建一个非空列表时,它每次都会创建一个新列表,并且即使它们包含相同的元素,它们也不会 eq?
彼此。
引自TSPL3:
[..] Two objects are considered identical if they are represented internally by the same pointer value [..] The empty list () is identical to itself wherever it appears. [..] Two pairs, vectors, or strings created by different applications of cons, vector, string, etc., are distinct.
如果你改写
(let ((x '(1 2 3)))
(eq? x x))
它将是#t
。