为什么“else”是计划中的特殊符号?它可以定义为程序吗?

时间:2013-07-20 05:55:02

标签: lisp scheme

我最近通过阅读SICP开始学习Scheme。在开篇章节中,它涉及条件,它讨论了在else“特殊形式”中使用cond - 这对我的理解被定义为“解释器”只是知道“。我的问题,为什么else被定义为“特殊形式”而不是程序?

如果我启动我的mit-scheme解释器,并输入:(else 1)则会引发错误。如果我定义类似(define (myelse x) x)的内容,我可以像在cond表达式中使用它一样使用它,如:

(define (abs x)
    (cond ((< x 0) (- x))
        (myelse x)))

那么为什么else被视为特殊的东西,而不是在方案本身中定义?

2 个答案:

答案 0 :(得分:7)

如果是普通变量,你可以这样做:

(set! else #f)

然后依赖于正在执行的cond子句的所有else表达式将停止工作。

答案 1 :(得分:0)

这个问题已经回答了,但是……在我看来,更好的答案是:else 是 Scheme 中的关键字。不能处理关键字 (latu sensu) 的语言,例如 TeX,可以让您重新定义脚本中的任何单词 (~identifier),包括 ifelse< /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