为什么方案中的`和`运算符不是内置过程

时间:2014-11-13 05:52:15

标签: scheme lisp

我使用鸡计划解释器,当我输入not时,它会返回#<procedure (not x295)>,但当我尝试andor时,它会返回Error: unbound variable: and

似乎and运算符不是内置程序,为什么它与not不同?

如果确实如此,(and #t #f)如何评估?

1 个答案:

答案 0 :(得分:6)

andor是&#34;短路运营商&#34; - 他们对评估结果的评估不会超过ifcond。例如:

(and #f (display "foo"))

不会显示任何内容,也不会显示任何内容:

(or #t (display "foo"))

使用过程无法执行此操作,因为对过程的调用将在输入过程之前评估所有参数:

(define (proc-or x y) (if x #t (if y #t #f)))
(proc-or #t (display "foo"))
; displays "foo" anyway

if(或实际上,or)这样的特殊表单可以决定它希望评估哪些参数。请参阅有关条件运算符的任何Scheme手册,或更常见的特殊表单(例如MIT SchemeRacket ...)

更具体地说,orand将是原始形式(如if),或将运算符转换为原始形式序列的宏。