我用鸡Scheme解释,当我键入not,它返回#<procedure (not x295)>,但是当我试图and和or,则返回Error: unbound variable: and.
看来and操作员不是内置程序,为什么它不同not?
如果这是真的,如何(and #t #f)评估?
and并且or是"短路操作员" - 他们不会对形成的结果进行评估,就像if和cond.例如:
(and #f (display "foo"))
Run Code Online (Sandbox Code Playgroud)
不会显示任何内容,也不会显示:
(or #t (display "foo"))
Run Code Online (Sandbox Code Playgroud)
使用过程无法执行此操作,因为对过程的调用将在输入过程之前评估所有参数:
(define (proc-or x y) (if x #t (if y #t #f)))
(proc-or #t (display "foo"))
; displays "foo" anyway
Run Code Online (Sandbox Code Playgroud)
像if(或实际上or)这样的特殊形式可以决定它希望评估哪些参数.请参阅有关条件运算符的任何Scheme手册,或更一般的特殊表格(例如MIT Scheme,Racket ......)
更具体地,or并且and将或者原始的形式(如if),或者操作者翻译成的原始形式的序列的宏.