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