我用鸡Scheme解释,当我键入not
,它返回#
,但是当我试图and
和or
,则返回Error: unbound variable: and
.
看来and
操作员不是内置程序,为什么它不同not
?
如果这是真的,如何(and #t #f)
评估?
and
并且or
是"短路操作员" - 他们不会对形成的结果进行评估,就像if
和cond
.例如:
(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 Scheme,Racket ......)
更具体地,or
并且and
将或者原始的形式(如if
),或者操作者翻译成的原始形式的序列的宏.