为什么我不能在方案中定义"或 - 函数"?

Edg*_*gar 6 scheme

我在计划中发现了关于特殊功能"或"的这个问题:

Joe Hacker大声说没有理由或者Scheme中需要特殊 - 它可以由程序员定义,如下所示:

(define (or x y)
    (if x
        #t
        y))
Run Code Online (Sandbox Code Playgroud)

乔对吗?

我无法弄清楚为什么不应该这样做.

有些计划专家可以解释一下这是否有效,如果没有:为什么不呢?

Fre*_*Foo 13

这是因为这个版本or评估了它的所有参数(因为它是一个函数),而标准的Scheme or(它不是一个函数,而是特殊的语法)却没有.尝试(or #t (exit))在Scheme REPL上运行,然后尝试使用您的or函数.

标准的行为or有时被称为短路:它只评估它需要的那些参数.这对于跨编程语言的二进制布尔运算符(orand)非常常见.or 看起来像函数调用的事实是Scheme/Lisp语法的一个特性,但看起来很欺骗.