【问题标题】:Quoting numerical constants in Chez Scheme在 Chez Scheme 中引用数字常量
【发布时间】:2021-03-16 14:56:20
【问题描述】:
我很好奇为什么 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
>
【问题讨论】:
标签:
scheme
lisp
chez-scheme
【解决方案1】:
这不是 Chez 特有的,而是标准行为;参见例如R5RS:
符号的书写规则与标识符的书写规则完全相同[6.3.3 Symbols]
所以数字文字不能是符号,因为它不是标识符。
现在,'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。