我真的无法弄清楚和之间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 规范草案。一探究竟!