Clojure:申请或列表

dem*_*emi 3 clojure

这个问题类似于说,在clojure中,如何将'和'应用到列表中?,但解决方案不适用于我的问题.every?function只返回一个布尔值.

or 是一个宏,所以这段代码无效:

(apply or [nil 10 20])  ; I want to get 10 here, as if 'or was a function.
Run Code Online (Sandbox Code Playgroud)

使用not-every?我将得到布尔值,但我想保留语义or- "true"元素应该是表达式的值.什么是惯用的方法呢?

我的想法到目前为止:

(first (drop-while not [nil 10 20]))  ; = 10
Run Code Online (Sandbox Code Playgroud)

cob*_*bal 6

你可以用some它:

(some identity [nil 10 20]) ; = 10
Run Code Online (Sandbox Code Playgroud)

请注意,这与or它失败时有所不同

(some identity [false]) ; = nil
(or false) ; = false
Run Code Online (Sandbox Code Playgroud)