我有一个表达式:(map some-proc some-list)
评估为'(#f #f #f)
。
我想检查此列表中的所有布尔值是否都为真。然而,
(and '(#f #f #f))
返回'(#f #f #f)
,而我注意#f
。
现在,如果我(apply and '(#f #f #f))
,我收到错误:
DrRacket环境中的and: bad syntax in: and
。这很令人困惑,因为“球拍参考”提供的(apply + '(1 2 3))
示例似乎与我的问题相同。
我做错了什么以及如何从#f
中取出'(#f #f #f)
?
答案 0 :(得分:6)
你可以使用andmap:
> (andmap (lambda (x) x) '(#f #f #f))
#f
问题源于这样一个事实:和不是一个过程,而是一个宏,以避免评估它的所有参数。
它可以在Lazy Racket中使用,其中和是一个过程。
答案 1 :(得分:2)
另一种方法:
(foldr (lambda(x y) (and x y)) #t '(#f #f #f))
或者我将重写uselpa的解决方案(andmap):
(andmap identity '(#f #f #f))