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

Zhe*_*ang 4 lisp scheme

我用鸡Scheme解释,当我键入not,它返回#<procedure (not x295)>,但是当我试图andor,则返回Error: unbound variable: and.

看来and操作员不是内置程序,为什么它不同not

如果这是真的,如何(and #t #f)评估?

Ama*_*dan 6

and并且or是"短路操作员" - 他们不会对形成的结果进行评估,就像ifcond.例如:

(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),或者操作者翻译成的原始形式的序列的宏.

  • 但Scheme R5RS规范不允许延迟评估.它需要一个急切的评估(对于大多数程序调用). (3认同)