我真的无法弄清楚eq?
,eqv?
和equal?
请解释一下。
此外,为什么我们需要它们?
答案 0 :(得分:4)
有关技术说明,请查看specification,您将找不到更详细的参考。或者只是检查口译员的documentation,例如在Racket中:
<强> (equal? v1 v2) → boolean?
强>
当且仅当它们是
equal?
时,两个值为eqv?
,除非为特定数据类型另行指定。进一步指定equal?
的数据类型包括字符串,字节字符串,对,可变对,向量,框,哈希表和可检查结构。在最后六个案例中,以递归方式定义了相等性;如果v1
和v2
都包含引用周期,则当值的无限展开相等时,它们是相等的。
<强> (eqv? v1 v2) → boolean?
强>
当且仅当它们是
eqv?
时,两个值为eq?
,除非为特定数据类型另行指定。数字和字符数据类型是eqv?
与eq?
不同的唯一数据类型。
<强> (eq? v1 v2) → boolean?
强>
如果eq?
和#t
引用相同的对象,则{p>v1
会返回v2
,否则为#f
。另请参阅Object Identity and Comparisons。
答案 1 :(得分:1)
RNRS规范中有两页与eq?, eqv?, equal? and =
相关。这是Draft R7RS Specification。看看吧!