Edg*_*gar 6 scheme
我在计划中发现了关于特殊功能"或"的这个问题:
Joe Hacker大声说没有理由或者Scheme中需要特殊 - 它可以由程序员定义,如下所示: (define (or x y) (if x #t y)) Run Code Online (Sandbox Code Playgroud) 乔对吗?
Joe Hacker大声说没有理由或者Scheme中需要特殊 - 它可以由程序员定义,如下所示:
(define (or x y) (if x #t y))
乔对吗?
我无法弄清楚为什么不应该这样做.
有些计划专家可以解释一下这是否有效,如果没有:为什么不呢?
Fre*_*Foo 13
这是因为这个版本or评估了它的所有参数(因为它是一个函数),而标准的Scheme or(它不是一个函数,而是特殊的语法)却没有.尝试(or #t (exit))在Scheme REPL上运行,然后尝试使用您的or函数.
or
(or #t (exit))
标准的行为or有时被称为短路:它只评估它需要的那些参数.这对于跨编程语言的二进制布尔运算符(or和and)非常常见.or 看起来像函数调用的事实是Scheme/Lisp语法的一个特性,但看起来很欺骗.
and
归档时间:
14 年,7 月 前
查看次数:
862 次
最近记录:
14 年,6 月 前