Scheme 中的cond
-expression 是一种特殊形式,但是else
在-expression 中用作final case 的关键字是cond
一种特殊形式吗?或者它只是一个保留关键字,基本上等同于真值 #t ?在后一种情况下,为什么我不能写类似的东西(?eq else #t)
?
问问题
104 次
3 回答
3
cond
它是and语法的一部分case
。R 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 回答