如何在Clojure中应用'或'?

时间:2013-12-11 14:27:20

标签: clojure

我有一系列的价值观。我想知道他们中的任何一个是否评估为真。

(def input [nil nil nil 1 nil 1])

我想做这样的事情:

(apply or input)

但我不能,因为or is a macro不是一个功能。同样,这将不起作用

(reduce or input)

我写了自己的

(def orfn #(if %1 %1 %2))

现在这个有用了

(reduce orfn input)

虽然这种方法略有不同,但它只测试nil

(not (every? nil? input))

apply or或同等的“正确”方式是什么?

2 个答案:

答案 0 :(得分:9)

您可以some使用identity来执行此操作:

(some identity [nil nil nil 1 nil 1])
=> 1

some返回将一个函数应用于序列的第一个truthy值,因此这是有效的,因为1是一个真值。

答案 1 :(得分:4)

(some identity [nil nil nil nil 1 nil 1])