我试图使用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.
但是,当我尝试使用逻辑运行它时,或者在"或"中得到"或:错误的语法"
我究竟做错了什么?另外,是否有一种替代方法可以在不使用折叠的情况下计算列表或列表?
在折叠的具体情况下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它是宏,因为它具有短路行为.