问题描述
我将如何编写自己的eqv?或相等?在计划中?我会做一个cond并寻找符号,数字等,然后返回适当的#t或#f吗?
How would I go about writing my own eqv? or equal? in scheme? Would I just do a cond and look for symbol?, number?, etc and return the appropriate #t or #f?
推荐答案
按照的规定,的最低实施规范eqv?
(当传递两个参数 obj1
和 obj2
时)为 #t
是:
As per R5RS, the minimum specifications for an implementation of eqv?
(when passed two arguments obj1
and obj2
) to evaluate to #t
are:
-
obj1
和obj2
都是#t
或都是#f
。 (两个布尔文字如何计算为相同的值取决于实现)。 -
obj1
和obj2
都是符号,并且
obj1
andobj2
are both#t
or both#f
. (how two boolean literals evaluate to the same value is implementation dependent).obj1
andobj2
are both symbols and
(string =?
(symbol-> ; string obj1)
(symbol-> string obj2))=)
=> #t
-
obj1
和obj2
都是数字,在数值上等于(=
),或者都是精确的,或者都是不精确的。 -
obj1
和obj2
都是字符,根据是相同字符char =?
过程。 -
obj1
和obj2
是空列表。 -
obj1
和obj2
是对,向量或表示商店中相同位置的字符串(请参阅R5RS的3.4节)。 -
obj1
和obj2
是位置标签相等的过程(在概念上用 标记了一个lambda
表达式在计划的实现之间这意味着不同。另请参见R5RS的4.1.4节。
obj1
andobj2
are both numbers, are numerically equal (=
), and are either both exact or both inexact.obj1
andobj2
are both characters and are the same character according to thechar=?
procedure.- both
obj1
andobj2
are the empty list. obj1
andobj2
are pairs, vectors, or strings that denote the same locations in the store (See section 3.4 of R5RS).obj1
andobj2
are procedures whose location tags are equal (Alambda
expression is conceptually tagged with a storage location. What that means varies between Scheme implementations. Also see section 4.1.4 of R5RS).
equal?
可以用 eqv?
的方式实现,因为它递归地比较了对ve的内容ctor和字符串,将 eqv?
应用于其他对象,例如数字和符号。
equal?
could be implemented in terms of eqv?
as it recursively compares the contents of pairs, vectors, and strings, applying eqv?
on other objects such as numbers and symbols.
这篇关于自定义eqv?/等于?计划中的功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!