我最近通过阅读SICP开始学习Scheme.在开篇章节中,它涉及条件,并谈到else在cond"特殊形式"中使用 - 我的理解被定义为"解释器"只知道".我的问题,为什么被else定义为"特殊形式"而不是一个程序?
如果我启动我的mit-scheme解释器,并键入:(else 1)它会引发错误.如果我定义类似的东西(define (myelse x) x),我可以cond像在表达式中使用它一样使用它:
(define (abs x)
(cond ((< x 0) (- x))
(myelse x)))
Run Code Online (Sandbox Code Playgroud)
那么为什么被else视为特殊的东西,而不是在方案本身中定义?
如果它是普通变量,你可以这样做:
(set! else #f)
Run Code Online (Sandbox Code Playgroud)
然后cond依赖于else正在执行的子句的所有表达式将停止工作.