1

Scheme 中的cond-expression 是一种特殊形式,但是else在-expression 中用作final case 的关键字是cond一种特殊形式吗?或者它只是一个保留关键字,基本上等同于真值 #t ?在后一种情况下,为什么我不能写类似的东西(?eq else #t)

4

3 回答 3

3

cond它是and语法的一部分caseR 7 RS指定以下语法:

(cond <cond clause>+)
(cond <cond clause>* (else <tail sequence>))

(case <expression>
  <case clause>+)
(case <expression>
  <case clause>*
  (else <tail sequence>))

它没有在这些特殊形式的语法之外定义。

于 2021-01-21T16:45:36.517 回答
2

Scheme 标准调用else,如在cond表单中使用的,辅助语法R6RS 展示了一种可能的cond使用syntax-rules; 这里else称为<literal>

(define-syntax cond
  (syntax-rules (else =>)
    ((cond (else result1 result2 ...))
     (begin result1 result2 ...))
;; ...

请注意,else它不能替代#t. <literal>是用于匹配输入子表单的标识符;它被视为syntax-rules表单中的句法关键字。

于 2021-01-21T17:14:37.323 回答
1

两者都不。else您可以通过在 a 之外进行评估来测试cond它:它的行为就像任何其他未绑定的符号一样。宏对它进行了特殊处理,cond但在任何其他上下文中它本身并没有什么特别之处。

于 2021-01-21T16:45:53.550 回答