我真的无法弄清楚和之间eq?
的主要区别eqv?
equal?
请解释一下。
此外,我们为什么需要它们?
有关技术说明,请查看规范,您将找不到更详细的参考。或者只是检查您的解释器的文档,例如在 Racket 中:
(equal? v1 v2) → boolean?
两个值是
equal?
当且仅当它们是eqv?
,除非为特定数据类型另外指定。进一步规范的数据类型equal?
包括字符串、字节字符串、对、可变对、向量、框、哈希表和可检查结构。在最后六种情况下,相等是递归定义的;如果两者v1
和v2
都包含参考循环,则当值的无限展开相等时,它们是相等的。
(eqv? v1 v2) → boolean?
两个值是
eqv?
当且仅当它们是eq?
,除非为特定数据类型另外指定。数字和字符数据类型是唯一eqv?
不同于eq?
.
(eq? v1 v2) → boolean?
eq?
#t
如果v1
和v2
引用同一个对象,则返回,#f
否则。另请参阅对象标识和比较。
RNRS 规范中有整整两页与eq?, eqv?, equal? and =
. 这是R7RS 规范草案。一探究竟!