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

问题描述

| 在这个例子中
> (= 1 1)
#t
> (= \'a \'a)
*** ERROR IN (console)@2.1 -- (Argument 1) NUMBER expected
(= \'a \'a)
1> 
如何测试引用符号的相等性?     

解决方法

        您可以使用
eq?
eqv?
equal?
中的任何一个。 这三个都可以与任何对象一起使用而不会出错(与
=
不同,后者只能与数字一起使用)。但是,结果将根据传入的类型而有所不同。但是,如果您知道要比较符号,则所有符号都将具有相同的结果。 如果您已完成任何Java编程,则
eqv?
就像
==
,而
equal?
就像
.equals()
。简单来说,,2ѭ进行身份比较,
equal?
进行值比较。 (并且
eq?
做一个直接的指针比较。对于某些实现,它可能比
eqv?
快,但要理解,有时对于相等的数字或字符,它返回false。对于其他实现,它与ѭ2exactly完全相同。大多数出于可靠性考虑,您应该坚持使用
eqv?
进行身份比较,而忘记存在
eq?
。)     ,        从计划文档https://www.gnu.org/software/guile/manual/html_node/Equality.html
eq?
仅针对同一对象进行测试(本质上是指针比较)。这是快速的,可在搜索特定对象或使用符号或关键字(它们始终是唯一的对象)时使用。
eqv?
扩展
eq?
以查看数字和字符的值。例如,它的用法类似于ѭ4used(请参见比较),但如果一个操作数不是数字,则不会出错。
equal?
走得更远,它(递归地)查看列表,向量等的内容。例如,在已在不同位置读取或计算且相同但不是由相同对组成的列表上,这很好。这样的列表看起来一样(打印时),并且相等吗?会认为它们相同。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...