自定义eqv?/相等?计划中的功能

时间:2010-12-07 05:35:09

标签: function comparison scheme

我将如何编写自己的eqv?还是相等?在计划?我会做一个cond并寻找符号吗?,数字?等,并返回相应的#t或#f?

1 个答案:

答案 0 :(得分:5)

根据R5RSeqv?(当传递两个参数obj1obj2)以评估为#t时,实施的最低规格为:

  • obj1obj2都是#t#f。 (两个布尔文字如何评估相同的值取决于实现)。
  • obj1obj2都是符号和

(string=? (symbol->string obj1) (symbol->string obj2)) =) => #t

  • obj1obj2都是数字,在数字上相等(=),并且都是精确的或两者都不准确。
  • obj1obj2都是字符,并且根据char=?程序是相同的字符。
  • obj1obj2都是空列表。
  • obj1obj2是表示商店中相同位置的对,向量或字符串(请参阅R5RS第3.4节)。
  • obj1obj2是位置标记相等的程序(A lambda 表达式在概念上标记了存储位置。这意味着在Scheme实现之间有所不同。另见R5RS第4.1.4节。

equal?可以用eqv?实现,因为它递归地比较对,向量和字符串的内容,将eqv?应用于其他对象,如数字和符号。