Equivalence predicates
eq?, eqv?和equal?在不同的场合都有使用。 本文档总结在pscm中三者的实现方法。 在pscm中,通过Cell表达一个Scheme的类型。 Cell内部有一个void*指向具体类型地址。
cpp
class {
void* data_;
}eq?
根据R5RS文档的描述
eq? is the finest or most discriminating
eqv?
eqv?稍微松一点,对于Symbol, Number, Char和String类型,会比较具体的值。 其他类型同eq?。
equal?
equal?是最松的判定,对Pair类型,也会判定car和cdr是否是eqv?。
举例说明
scheme
(equal? '(a) '(a))
;;; ==> #t
(eq? '(a) '(a))
;;; ==> #f