我将如何编写自己的eqv?还是相等?在计划?我会做一个cond并寻找符号吗?,数字?等,并返回相应的#t或#f?
答案 0 :(得分:5)
根据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?
应用于其他对象,如数字和符号。