lisp - 为什么 "else"是scheme中的特殊符号?它可以定义为一个程序吗?

标签 lisp scheme

我最近通过阅读 SICP 开始学习 Scheme。在第一章中,它讨论了条件语句,并讨论了在 cond “特殊形式”中使用 else - 在我看来,它被定义为“解释器的东西”知道”。我的问题是,为什么 else 被定义为“特殊形式”而不是过程?

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

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

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

最佳答案

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

(set! else #f)

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

关于lisp - 为什么 "else"是scheme中的特殊符号?它可以定义为一个程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17759178/

相关文章:

lisp - 普通口齿不清 : flush standard output

haskell - 柯里化(Currying)函数的实际使用?

scheme - 将Scheme常量转换为等效的Common Lisp

tree - 在 Lisp 中逐层遍历树(广度优先)

lisp - 普通口齿不清; AI 编程示例范例不起作用

programming-languages - 当我想编写视频处理应用程序时,是否有合适的 C++ 替代品?

functional-programming - 你如何在 Scheme 中使用原始表达式找到第 6 个根?

list - 将新项目附加到方案中列表的末尾

scheme - Racket "eval"一个数据

lisp - sbcl Common Lisp incf 警告