应用逻辑和

时间:2013-03-02 08:43:14

标签: boolean racket logical-operators

我有一个表达式:(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)

2 个答案:

答案 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))