我正在尝试使用 Dr.Racket 在 Scheme 中运行以下代码
(foldr or #f '(#f #f #f #t))
现在,我希望这会起作用,因为
(foldr + 0 '(1 2 3))
工作得很好,返回 6。
但是当我尝试使用逻辑或运行它时,我得到“或:语法错误:或”
我究竟做错了什么?此外,是否有另一种方法可以在不使用折叠的情况下计算列表的或?
我正在尝试使用 Dr.Racket 在 Scheme 中运行以下代码
(foldr or #f '(#f #f #f #t))
现在,我希望这会起作用,因为
(foldr + 0 '(1 2 3))
工作得很好,返回 6。
但是当我尝试使用逻辑或运行它时,我得到“或:语法错误:或”
我究竟做错了什么?此外,是否有另一种方法可以在不使用折叠的情况下计算列表的或?
我的方案相当弱,但如果我没记错的话,或者是一个宏,而不是一个函数,所以你不能在高阶调用中传递它。但是,您可以将其包装在 lambda 中,从而导致外观不那么令人愉快:
(foldr (lambda (a b) (or a b)) #f '(#f #f #f #t)) => #t
如果您事先知道参数的数量,值得注意的是 or 接受零个或多个参数:
(or) => #f
(or #f) => #f
(or #t) => #t
(or #t #f) => #t
(or #f #f #f #f #f) => #f
否则,您将需要比我更有经验的 Schemer 来提供答案。