使用Clojure中的逻辑函数“reduce”或“apply”

时间:2010-05-23 12:29:07

标签: clojure

我无法在Clojure(1.2)中的一系列布尔值上使用逻辑函数。由于逻辑函数是宏,以下两种方法都不起作用:

(reduce and [... sequence of bools ...])
(apply or [... sequence of bools ...])

错误消息说我“无法获取宏的值:#'clojure.core/and”。如何在不编写样板代码的情况下应用这些逻辑函数(宏)?

2 个答案:

答案 0 :(得分:51)

请勿 - 改为使用every?some

答案 1 :(得分:14)

Michal的答案已经确定,但是当您想要将宏用作函数时,以下替代方法在类似情况下非常有用:

(reduce #(and %1 %2) [... sequence of bools ...])

基本上你只需将宏包装在一个匿名函数中。

考虑这种方法有几个很好的理由:

  • 在某些情况下,someevery?等便利功能不存在
  • 您可能会获得更好的性能(减少可能会从将来的一些非常好的优化中受益,例如将函数直接应用于向量而不是将向量转换为序列)