"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)?

它是 condcase 语法的一部分。 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 形式中的句法关键字。