我很好奇为什么Chez Scheme不把数字当作符号。无论它们是在列表中还是单独引用,number?
都返回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:
写入符号的规则与写入标识符的规则完全相同[6.3.符号]
所以数字文字不能是符号,因为它不是标识符。
现在,'e
是(quote e)
和的简写
(quote <datum>)
的求值结果为<datum>
。[4.1.2文字表达]
也就是说,(quote 1)
-'1
-计算为整数1
,(quote a)
-'a
-计算为符号a
。
数值常量、字符串常量、字符常量和布尔常量的计算结果为"自身";它们不需要被引用。[4.1.2文字表达]
这有点令人困惑,因为REPL在";引用的简写";形式,但这只是一个输出约定
请注意,(display 'a)
将显示a
,而不是'a
。