> (eq? 1 1)
#t
> (eq? 1.1 1.1)
#f
> (= 1.1 1.1)
#t
这是 DrScheme 中的交互窗口。有人可以解释=和eq之间的区别吗?在计划?
= 比较数字。情商?测试参数是否代表内存中的相同数据对象。当量?应该在第二种情况下工作,因为它测试与 eq 相同?但专门测试原语。 更多关于方案中的等价谓词here。
我猜想自从
情商?计算结果为#f,除非其参数表示内存中的相同数据对象;
和
Scheme 存储不精确数字 (1.1) 与精确数字 (1) 不同
两个 1.1 参数不在内存中的同一位置并返回 #f for eq?
情商?数字是不可预测的。是否嵌入数字文字以使相同的数字位于内存中的相同位置取决于实现与否。例如,Racket 语言最近选择在阅读过程中实习这些文字。 http://www.mail-archive.com/dev@racket-lang.org/msg04893.html
您不确定您的语言实现的运行时是否会唯一地表示每个数字。这会影响被装箱的值,例如浮点数和大数。这就是为什么=作为数字谓词存在的原因:它检查内容的相等性,而不是浅指针相等性。
这并不是像 Scheme 这样的语言所独有的:例如,Python 中出现了相等与相等(is vs. ==)。