2013-12-11 18 views
4

我有一系列的值。我想知道他们中的任何一个是否评估为真。如何在Clojure中应用'或'?

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

我想要做这样的事情:

(apply or input) 

但我不能因为oris a macro不是一个函数。同样,这将不起作用

(reduce or input) 

我写我自己的

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

现在这个工作

(reduce orfn input) 

一样这种方法稍有不同,虽然它只是试验nil

(not (every? nil? input)) 

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

+0

在一般情况下[这可以帮助](http://stackoverflow.com/questions/9273333/in-clojure-how-to-apply-a-macro-to-a-list) – soulcheck

+0

非常感谢@soulcheck 。我认为,我遇到的问题的最佳解决方案是“一些”。 – Joe

回答

9

您可以使用someidentity做到这一点:

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

some返回对一个函数序列中的第truthy值,所以这个工作,因为1是truthy值。

4

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