2

我有一个表达式:(map some-proc some-list) 它的计算结果为'(#f #f #f).

我想检查此列表中的所有布尔值是否为真。然而, (and '(#f #f #f))回报'(#f #f #f),而我注意到了#f

现在,如果我(apply and '(#f #f #f)),我得到错误: and: bad syntax in: and在 DrRacket 环境中。这令人困惑,因为 Racket Reference 给出的示例(apply + '(1 2 3))似乎与我的问题相同。

我做错了什么以及如何#f摆脱'(#f #f #f)

4

2 回答 2

7

您可以使用 andmap :

> (andmap (lambda (x) x) '(#f #f #f))
#f

问题源于这样一个事实,并且不是一个过程,而是一个宏,以避免对其所有参数的评估。

但是,它可以在 Lazy Racket 中工作,并且是一个过程。

于 2013-03-02T08:47:24.490 回答
2

只是另一种方式:

(foldr (lambda(x y) (and x y)) #t '(#f #f #f))

或者我将重写uselpa的解决方案(andmap):

(andmap identity '(#f #f #f))
于 2013-03-02T09:15:37.833 回答