在方案中自定义eqv?equal?

问题描述 投票:0回答:2

我怎么去写我自己的eqv?或equal?在scheme中?我是否只需要做一个cond,然后查找符号?、数字?等,然后返回相应的#t或#f?

function comparison scheme
2个回答
5
投票

按照 R5RS的最低规格。eqv? (当传递两个参数 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? 在其他物体上,如数字和符号。

© www.soinside.com 2019 - 2024. All rights reserved.