4

我最近通过阅读 SICP 开始学习 Scheme。在开篇一章中,它讨论了条件,并谈到了elsecond“特殊形式”中的使用——据我所知,它被定义为“解释器“只知道”的东西。我的问题是,为什么被else定义为“特殊形式” “而不是作为一个程序?

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

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

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

4

2 回答 2

8

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

(set! else #f)

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

于 2013-07-20T05:58:16.077 回答
0

这个问题已经得到了回答,但......在我看来,更好的答案是:else是 Scheme 中的一个关键字。不能使用关键字 ( latu sensu ) 的语言,如 TeX,允许您重新定义脚本中的任何单词 (~identifier),包括ifelse(在 TeX 术语中,\if 和 \else)。但是在 Scheme(以及许多其他语言,如 C 和 Phyton)中,else 关键字规则编译器/解释器文本程序核心的重要事物,即在它们的编译时确定。所以这样的重新定义是行不通的。

http://community.schemewiki.org/?scheme-keywords http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-ZH-7.html#%_idx_108

于 2021-04-17T01:11:20.533 回答