3

我真的无法弄清楚和之间eq?的主要区别eqv?equal?

请解释一下。

此外,我们为什么需要它们?

4

2 回答 2

4

有关技术说明,请查看规范,您将找不到更详细的参考。或者只是检查您的解释器的文档,例如在 Racket 中:

(equal? v1 v2) → boolean?

两个值是equal?当且仅当它们是eqv?,除非为特定数据类型另外指定。进一步规范的数据类型equal?包括字符串、字节字符串、对、可变对、向量、框、哈希表和可检查结构。在最后六种情况下,相等是递归定义的;如果两者v1v2都包含参考循环,则当值的无限展开相等时,它们是相等的。

(eqv? v1 v2) → boolean?

两个值是eqv?当且仅当它们是eq?,除非为特定数据类型另外指定。数字和字符数据类型是唯一eqv?不同于eq?.

(eq? v1 v2) → boolean?

eq?#t如果v1v2引用同一个对象,则返回,#f否则。另请参阅对象标识和比较

于 2013-07-09T14:28:28.127 回答
1

RNRS 规范中有整整两页与eq?, eqv?, equal? and =. 这是R7RS 规范草案。一探究竟!

于 2013-07-09T19:40:01.163 回答