(方案)eq? EQV?等于?区别

时间:2013-07-09 14:18:47

标签: lisp scheme equality

我真的无法弄清楚eq?eqv?equal?

之间的主要区别

请解释一下。

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

2 个答案:

答案 0 :(得分:4)

有关技术说明,请查看specification,您将找不到更详细的参考。或者只是检查口译员的documentation,例如在Racket中:

<强> (equal? v1 v2) → boolean?

  

当且仅当它们是equal?时,两个值为eqv?,除非为特定数据类型另行指定。进一步指定equal?的数据类型包括字符串,字节字符串,对,可变对,向量,框,哈希表和可检查结构。在最后六个案例中,以递归方式定义了相等性;如果v1v2都包含引用周期,则当值的无限展开相等时,它们是相等的。

<强> (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。看看吧!