我有一系列的价值观。我想知道他们中的任何一个是否评估为真。
(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
或同等的“正确”方式是什么?
答案 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])