在clojure中是否有一个函数(给定谓词和集合),选择满足给定谓词的第一个项并停止迭代?
例如:
(select-first #(> % 10) (range))
=> 11
Run Code Online (Sandbox Code Playgroud)
如果没有,也许有人可能会暗示我有关惯用的实现
xsc*_*xsc 35
有多种可能性.
some
some
返回其谓词返回的第一个非零值.
(some #(when (> % 10) %) (range)) ;; => 11
Run Code Online (Sandbox Code Playgroud)
filter
+ first
filter
保留那些与谓词匹配的元素,first
检索它们中的第一个.
(first (filter #(> % 10) (range))) ;; => 11
Run Code Online (Sandbox Code Playgroud)
remove
+ first
如果你想找到与你的谓词不匹配的第一个元素,那么remove
你的朋友是:
(first (remove #(<= % 10) (range))) ;; => 11
Run Code Online (Sandbox Code Playgroud)
或者some
:
(some #(when-not (<= % 10) %) (range)) ;; => 11
Run Code Online (Sandbox Code Playgroud)
所以,就是这样,我想.
首先使用过滤器
user=> (->> (range) (filter #(> % 10)) first)
11
user=> (first (filter #(> % 10) (range)))
11
Run Code Online (Sandbox Code Playgroud)