我刚开始阅读 The Little schemer 。我对某些词有所了解。
在第27页,它说,
Eq法则
原始的eq?有两个论点。每个必须为非数字原子。"
一个脚注说:在实践中,一些数字可能是eq的参数?
我使用racket-minimal作为我的方案解释器。它会将(eq? 10 10)
评估为#t
。
TOYS章节中有许多类似的问题。
作者的意思是什么(标记为粗体)和脚注?
答案 0 :(得分:2)
传统的做法是在指针本身中嵌入一些原始数据类型(如低整数和字符),即使数据来源于源中不同时间点的源中,也会生成这些数据类型eq?
。但是,数字可以是任何大小,因此即使数字达到某个实现相关的大小,在某些时候它们对于指针也会很大。当您尝试(eq? 10000000000 10000000000)
时,它可能是32位系统上的#f
和64位系统中的#t
,而(eqv? 10000000000 10000000000)
在任何系统中都是#t
。
答案 1 :(得分:1)
Scheme的真实身份谓词是eqv?
。 Eq?
是一个优化版本,当应用于数字,字符或过程时,可以报告#f
而不是#t
。 eq?
的大多数Scheme实现在小的确切数字(称为" fixnums"),字符和过程上做正确的事情,但是落在更大的数字或其他类型的数量上。
所以说"必须"意味着如果将eq?
应用于数字,则只能得到部分可预测的结果;脚注意味着在某些情况下(通常包括10个)你会逃脱它。有关各种方案实际使用fixnums的详细信息,请参阅R7RS开发站点上的FixnumInfo。