Skip to content

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, CharString类型,会比较具体的值。 其他类型同eq?

equal?

equal?是最松的判定,对Pair类型,也会判定carcdr是否是eqv?

举例说明

scheme
(equal? '(a) '(a))
;;; ==> #t
(eq? '(a) '(a))
;;; ==> #f

This website is released under the MIT License.