0

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


4

1 回答 1

1

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

符号的书写规则与标识符的书写规则完全相同 [6.3.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

于 2020-12-04T15:05:31.307 回答