在 Chez Scheme 中引用数值常量

Quoting numerical constants in Chez Scheme

我很好奇为什么 Chez Scheme 不将数字视为符号。无论是在列表中还是单独引用,number? returns true,意思是没有做成符号。这有实际原因吗?

Chez Scheme Version 9.5.4
Copyright 1984-2020 Cisco Systems, Inc.

> (number? (car '(1 2 3 4 5)))
#t
> (symbol? (car '(1 2 3 4 5)))
#f
> (define symbolic-num '5)
> (number? symbolic-num)
#t
> (symbol? symbolic-num)
#f
> 


这不是 Chez 特有的,而是标准行为;参见例如R5RS:

The rules for writing a symbol are exactly the same as the rules for writing an identifier [6.3.3 Symbols]

所以数字文字不能是符号,因为它不是标识符。

现在,对于 (quote e)'e 是 shorthand,

(quote <datum>) evaluates to <datum>. [4.1.2 Literal expressions]

也就是说,(quote 1) - '1 - 计算结果为 1,这是一个整数,而 (quote a) - 'a - 计算结果为 a,这是一个符号。

Numerical constants, string constants, character constants, and boolean constants evaluate ``to themselves''; they need not be quoted. [4.1.2 Literal expressions]

这有点令人困惑,因为 REPL 以“shorthand-quoted”形式打印一些内容,但这只是一种输出约定。
请注意 (display 'a) 将显示 a,而不是 'a