微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 cond 表达式中用作最终情况的“else”关键字是 Scheme 中的一种特殊形式吗?

如何解决在 cond 表达式中用作最终情况的“else”关键字是 Scheme 中的一种特殊形式吗?

Scheme 中的 cond 表达式是一种特殊形式,但是 else 关键字在 cond 表达式中用作最后的情况是一种特殊形式吗?或者它只是一个本质上等同于真值 #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>))

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

,

Scheme 标准调用 else,以 cond 形式使用,辅助语法R6RS shows one possible implementation of cond 使用 syntax-rules;这里的 else 被称为 :

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

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

,

都没有。您可以通过在 else 之外评估 cond 来测试这一点:它的行为就像任何其他未绑定符号。 cond 宏对其进行了特殊处理,但在任何其他上下文中都没有内在的特殊之处。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。