如何解决在 cond 表达式中用作最终情况的“else”关键字是 Scheme 中的一种特殊形式吗?
Scheme 中的 cond
表达式是一种特殊形式,但是 else
关键字在 cond
表达式中用作最后的情况是一种特殊形式吗?或者它只是一个本质上等同于真值 #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>))
它不是在这些特殊形式的语法之外定义的。
,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 举报,一经查实,本站将立刻删除。