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

Scheme 为什么方案中的`和`运算符不是内置过程,scheme,lisp,Scheme,Lisp,我使用chicken Scheme解释器,当我键入not时,它返回#,但当我尝试和和或时,它返回错误:未绑定变量:和 似乎和运算符不是内置过程,为什么它与非不同 如果这是真的,(和#t#f)是如何评估的呢?和以及或都是“短路运算符”-它们的评估不会超过形成结果所需的程度,就像如果和条件一样。例如: (and #f (display "foo")) 不会显示任何内容,以下内容也不会显示: (or #t (display "foo")) 对于过程不可能做到这一点,因为对过程的调用将在输入过程之前

我使用chicken Scheme解释器,当我键入
not
时,它返回
#
,但当我尝试
时,它返回
错误:未绑定变量:和

似乎
运算符不是内置过程,为什么它与
不同


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

以及
都是“短路运算符”-它们的评估不会超过形成结果所需的程度,就像
如果
条件一样。例如:

(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
(或者实际上是
或者
)这样的特殊形式可以决定要计算哪些参数。请参阅任何有关条件运算符的方案手册,或更一般的特殊形式(例如…)


更具体地说,
将是基本形式(如
如果
),或者是将运算符转换为一系列基本形式的宏。

可能重复使用惰性求值,可以使用过程/函数执行此操作。因此,这不是原语与过程的问题,但SchemeR5RS规范不允许延迟计算。它需要紧急求值(对于大多数过程调用)。@BasileStarynkevitch仅“most”?@knivil除特殊窗体和宏外,标准求值规则(即紧急求值)适用。这就是为什么
都是宏。