在或多或少地理解了这个问题的答案之后,在我看来,在 Racket/Scheme 中,在读者级别,语法树中每对的第二个元素必须是一个列表。换句话说,只要一个带点的 s-expression 形式(A . B)
表示语法树的一个顶点,B
就只能由一个解析为列表的 s-expression 来表示,例如(C D E)
. 例如:(A . (C D E))
。这当然可以写成(A C D E)
,因为它的解析方式相同。
(+ . (1 2 3)) ; => 6
(+ 1 2 3) ; => 6
(define . (x 1))
x ; => 1
(define y 2)
y ; => 2
我的问题是:除了内部文字数据之外,Racket/Scheme 语法中允许“点对”s 表达式的原因是什么?是否有可以使用对编写但不能使用列表更简单地编写的 Racket/Scheme 表达式的示例?