这个问题类似于说,在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)
你可以用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)