如何测试Scheme中引用符号的相等性?

Eon*_*nil 5 comparison scheme equality

在这个例子中,

> (= 1 1)
#t
> (= 'a 'a)
*** ERROR IN (console)@2.1 -- (Argument 1) NUMBER expected
(= 'a 'a)
1> 
Run Code Online (Sandbox Code Playgroud)

如何测试带引号的符号的相等性?

Chr*_*ung 8

您可以使用任意的eq?,eqv?equal?.

所有这三个都可以与任何对象一起使用而不会出错(不像=,它只能用于数字).但是,结果将根据您传入的类型而有所不同.但是如果您知道要比较符号,则所有符号都将具有相同的结果.

如果你已经做过任何Java编程,eqv?就像是==equal?.equals().简单来说,eqv?是进行身份比较,并equal?进行价值比较.

(并且eq?进行直接指针比较.对于某些实现,它可能比它更快eqv?,理解它有时为相同的数字或字符返回false.对于其他实现,它完全相同eqv?.大多数时候,为了健壮性,你应该坚持使用eqv?进行身份比较,忘记eq?存在.)