And*_*osa 2 functional-programming clojure
就像标题所说的那样,我正在寻找Clojure中的一个函数,它返回一个映射中第一个元素的索引以满足条件,我知道该怎么做,但是如果API中已有的东西我想要给我们.
例:
(strange-fn #(even? %) '(1 3 5 7 9 4))
=> 5
Run Code Online (Sandbox Code Playgroud)
您在示例中提供了列表而不是地图,因此我假设您的意思是任何序列.
一种简单的方法是只count
返回从take-while
以下位置返回的项目数:
(defn strange-fn [f coll]
(count (take-while (complement f) coll)))
(strange-fn #(even? %) '(1 3 5 7 9 4))
;=> 5
Run Code Online (Sandbox Code Playgroud)
这很容易做到,但要注意大多数情况下,如果你编写的代码适用于事物索引(特别是lazy-seqs),通常只需要处理序列就可以更加整洁.但是,如果您确定要处理指数,那就很简单了(fn [pred coll] (first (keep-indexed (fn [i x] (when (pred x) i)) coll)))
.