3

この質問は、「In clojure, how to apply 'and' to a list?」に似ています。、しかし解決策は私の質問には当てはまりません。every?関数はブール値のみを返します。

orはマクロであるため、このコードは無効です。

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

I を使用not-every?すると、ブール値のみが取得されますが、セマンティクスを保持したいor- 「true」要素は式の値である必要があります。これを行うための慣用的な方法は何ですか?

これまでの私の考え:

(first (drop-while not [nil 10 20]))  ; = 10
4

2 に答える 2

6

これに使用できる場合がありますsome

(some identity [nil 10 20]) ; = 10

orこれは、失敗した場合とは異なることに注意してください。

(some identity [false]) ; = nil
(or false) ; = false
于 2013-09-06T23:23:25.917 に答える