如何在Clojure中应用'或'?

Joe*_*Joe 4 clojure

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

(def input [nil nil nil 1 nil 1])
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

(apply or input)
Run Code Online (Sandbox Code Playgroud)

但我不能因为or 宏是一个功能.同样,这也行不通

(reduce or input)
Run Code Online (Sandbox Code Playgroud)

我写了自己的

(def orfn #(if %1 %1 %2))
Run Code Online (Sandbox Code Playgroud)

现在这个有效

(reduce orfn input)
Run Code Online (Sandbox Code Playgroud)

正如这种稍微不同的方法,尽管它只是测试nil.

(not (every? nil? input))
Run Code Online (Sandbox Code Playgroud)

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

mik*_*era 9

你可以用someidentity要做到这一点:

(some identity [nil nil nil 1 nil 1])
=> 1
Run Code Online (Sandbox Code Playgroud)

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