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

标签 comparison scheme equality

在这个例子中,

> (= 1 1)
#t
> (= 'a 'a)
*** ERROR IN (console)@2.1 -- (Argument 1) NUMBER expected
(= 'a 'a)
1> 

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

最佳答案

您可以使用 eq?eqv?equal? 中的任何一个。

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

如果你做过任何 Java 编程, eqv? 就像 ==equal? 就像 .equals() 。简单来说,eqv?做身份比较,equal?做值比较。

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

关于comparison - 如何测试Scheme中引用符号的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328468/

相关文章:

c++ - 使用自定义比较函数设置相等性

c++ - 比较函数中如何优化多个独立条件分支?

java - 将我的 Java 开发从 Windows 切换到 Mac 时,我应该注意什么问题或好处吗?

lisp - "application: not a procedure"计算二项式

functional-programming - 了解 Scheme 中的 fold-left 和 fold-right

javascript - 为什么是 `null >= 0 && null <= 0` 而不是 `null == 0` ?

java - 不被 Stream.distinct() 过滤的相等对象

go - 比较两个 slice

Javascript 字符串不比较,转义字符在使用 jQuery.val() 函数时不被转义

没有 Emacs 的 Lisp/Scheme 解释器?