在 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
。
我很好奇为什么 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
。