我怎么去写我自己的eqv?或equal?在scheme中?我是否只需要做一个cond,然后查找符号?、数字?等,然后返回相应的#t或#f?
按照 R5RS的最低规格。eqv?
(当传递两个参数 obj1
和 obj2
),以评估到 #t
是。
obj1
和 obj2
都是 #t
或两者 #f
. (两个布尔字面值如何计算为相同的值取决于实现)。obj1
和 obj2
既是符号又是 (string=?
(symbol->string obj1)
(symbol->string obj2)) =)
=> #t
obj1
和 obj2
都是数字,在数值上相等(=
),并且都是精确的,或者都是不精确的。obj1
和 obj2
都是字符,而且是同一个字符,根据。char=?
程序。obj1
和 obj2
是空列表。obj1
和 obj2
是表示存储中相同位置的对、向量或字符串(参见R5RS的3.4节)。obj1
和 obj2
是程序,它们的位置标签是相等的(A lambda
语气 概念上 标记的存储位置。这意味着什么,在不同的Scheme实现中有所不同。也请参见R5RS的4.1.4节)。)equal?
可以用以下方式实现 eqv?
递归比较对、向量和字符串的内容,应用 eqv?
在其他物体上,如数字和符号。