我最近通过阅读SICP开始学习Scheme。在开篇章节中,它涉及条件,它讨论了在else
“特殊形式”中使用cond
- 这对我的理解被定义为“解释器”只是知道“。我的问题,为什么else
被定义为“特殊形式”而不是程序?
如果我启动我的mit-scheme解释器,并输入:(else 1)
则会引发错误。如果我定义类似(define (myelse x) x)
的内容,我可以像在cond
表达式中使用它一样使用它,如:
(define (abs x)
(cond ((< x 0) (- x))
(myelse x)))
那么为什么else
被视为特殊的东西,而不是在方案本身中定义?
答案 0 :(得分:7)
如果是普通变量,你可以这样做:
(set! else #f)
然后依赖于正在执行的cond
子句的所有else
表达式将停止工作。
答案 1 :(得分:0)
这个问题已经回答了,但是……在我看来,更好的答案是:else 是 Scheme 中的关键字。不能处理关键字 (latu sensu) 的语言,例如 TeX,可以让您重新定义脚本中的任何单词 (~identifier),包括 if 和 else< /em>(在 TeX 术语中,\if 和 \else)。但是在 Scheme(以及许多其他语言,如 C 和 Phyton)中,else 关键字规定了编译器/解释器文本程序核心的重要事物,即。即,在它们的编译时确定。所以这样的重新定义是不切实际的。
http://community.schemewiki.org/?scheme-keywords http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-7.html#%_idx_108