小阴谋 - 语义

时间:2014-05-21 11:47:17

标签: scheme racket the-little-schemer

我刚开始阅读 The Little schemer 。我对某些词有所了解。

在第27页,它说,

Eq法则

原始的eq?有两个论点。每个必须为非数字原子。"

一个脚注说:在实践中,一些数字可能是eq的参数?

我使用racket-minimal作为我的方案解释器。它会将(eq? 10 10)评估为#t

TOYS章节中有许多类似的问题。


作者的意思是什么(标记为粗体)和脚注?

2 个答案:

答案 0 :(得分:2)

传统的做法是在指针本身中嵌入一些原始数据类型(如低整数和字符),即使数据来源于源中不同时间点的源中,也会生成这些数据类型eq?。但是,数字可以是任何大小,因此即使数字达到某个实现相关的大小,在某些时候它们对于指针也会很大。当您尝试(eq? 10000000000 10000000000)时,它可能是32位系统上的#f和64位系统中的#t,而(eqv? 10000000000 10000000000)在任何系统中都是#t

答案 1 :(得分:1)

Scheme的真实身份谓词是eqv?Eq?是一个优化版本,当应用于数字,字符或过程时,可以报告#f而不是#teq?的大多数Scheme实现在小的确切数字(称为" fixnums"),字符和过程上做正确的事情,但是落在更大的数字或其他类型的数量上。

所以说"必须"意味着如果将eq?应用于数字,则只能得到部分可预测的结果;脚注意味着在某些情况下(通常包括10个)你会逃脱它。有关各种方案实际使用fixnums的详细信息,请参阅R7RS开发站点上的FixnumInfo