将foldr与Scheme中的或逻辑运算符一起使用

Ony*_*nye 2 scheme

我试图使用Dr.Racket在Scheme中运行以下代码

(foldr or #f '(#f #f #f #t))
Run Code Online (Sandbox Code Playgroud)

现在,我希望这可以工作,因为

(foldr + 0 '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

工作得很好,返回6.

但是,当我尝试使用逻辑运行它时,或者在"或"中得到"或:错误的语法"

我究竟做错了什么?另外,是否有一种替代方法可以在不使用折叠的情况下计算列表或列表?

Chr*_*ung 5

在折叠的具体情况下or,你应该使用ormap.您可以传入identity(或甚至values)作为要使用的函数ormap.

> (ormap identity '(#f #f #f #f #t))
#t
> (ormap identity '(#f #f #f #f #f))
#f
Run Code Online (Sandbox Code Playgroud)

通常,您只能折叠函数而不是宏,并且or它是宏,因为它具有短路行为.