"else" 关键字在 cond 表达式中用作最终大小写,是 Scheme 中的一种特殊形式吗?
Is the "else" keyword, used as final case in a cond-expression, a special form in Scheme?
Scheme中的cond
-expression是一种特殊形式,但是else
关键字,用作cond
-expression中的final case,是一种特殊形式吗?或者它只是一个本质上等同于真值#t 的保留关键字?
在后一种情况下,为什么我不能写类似 (?eq else #t)
?
它是 cond
和 case
语法的一部分。 R7RS 指定以下语法:
(cond <cond clause>+)
(cond <cond clause>* (else <tail sequence>))
(case <expression>
<case clause>+)
(case <expression>
<case clause>*
(else <tail sequence>))
它没有在这些特殊形式的语法之外定义。
都没有。您可以通过在 cond
之外评估 else
来测试它:它的行为就像任何其他未绑定符号一样。 cond
宏对其进行了特殊处理,但在任何其他上下文中它本身并没有什么特别之处。
Scheme 标准调用else
,作为一个cond
form, auxiliary syntax. R6RS shows one possible implementation of cond
using syntax-rules
;这里 else
被称为 :
(define-syntax cond
(syntax-rules (else =>)
((cond (else result1 result2 ...))
(begin result1 result2 ...))
;; ...
请注意 else
不能替代 #t
。 是用于匹配输入子表单的标识符;它被视为 syntax-rules
形式中的句法关键字。
Scheme中的cond
-expression是一种特殊形式,但是else
关键字,用作cond
-expression中的final case,是一种特殊形式吗?或者它只是一个本质上等同于真值#t 的保留关键字?
在后一种情况下,为什么我不能写类似 (?eq else #t)
?
它是 cond
和 case
语法的一部分。 R7RS 指定以下语法:
(cond <cond clause>+)
(cond <cond clause>* (else <tail sequence>))
(case <expression>
<case clause>+)
(case <expression>
<case clause>*
(else <tail sequence>))
它没有在这些特殊形式的语法之外定义。
都没有。您可以通过在 cond
之外评估 else
来测试它:它的行为就像任何其他未绑定符号一样。 cond
宏对其进行了特殊处理,但在任何其他上下文中它本身并没有什么特别之处。
Scheme 标准调用else
,作为一个cond
form, auxiliary syntax. R6RS shows one possible implementation of cond
using syntax-rules
;这里 else
被称为
(define-syntax cond
(syntax-rules (else =>)
((cond (else result1 result2 ...))
(begin result1 result2 ...))
;; ...
请注意 else
不能替代 #t
。 syntax-rules
形式中的句法关键字。