如何在Clojure中使用“or”?

4

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

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

我希望能做类似以下这样的操作:

我想要实现:

(apply or input)

但是我不能这样做,因为or是一个宏,而不是一个函数。类似地,这也行不通。

(reduce or input)

我已经编写了自己的代码。
(def orfn #(if %1 %1 %2))

现在这个可以工作了

(reduce orfn input)

与之略有不同的方法是这样的,虽然它仅测试nil
(not (every? nil? input))

如何正确使用 apply 或者 其等价方法?


通常情况下,这可以帮助 - soulcheck
太好了,谢谢 @soulcheck。我认为解决我遇到的问题的最佳方案是 some - Joe
2个回答

9
您可以使用someidentity来实现此操作:
(some identity [nil nil nil 1 nil 1])
=> 1

some函数对序列中的每个元素应用一个函数并返回第一个真值,因此由于1是一个真值,所以这个函数可以工作。


4

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接