タイトルが示すように、条件を満たすためにマップ内の最初の要素のインデックスを返す Clojure の関数を探しています。その方法は知っていますが、API で既に何かが利用可能である場合は、私たちにそれ。
例:
(strange-fn #(even? %) '(1 3 5 7 9 4))
=> 5
タイトルが示すように、条件を満たすためにマップ内の最初の要素のインデックスを返す Clojure の関数を探しています。その方法は知っていますが、API で既に何かが利用可能である場合は、私たちにそれ。
例:
(strange-fn #(even? %) '(1 3 5 7 9 4))
=> 5
例ではマップではなくリストを提供したので、任意のシーケンスを意味すると思います。
これを行う簡単な方法の 1 つは、count
から返されたアイテムの数だけにすることtake-while
です。
(defn strange-fn [f coll]
(count (take-while (complement f) coll)))
(strange-fn #(even? %) '(1 3 5 7 9 4))
;=> 5
実行するのは簡単ですが、物事のインデックス (特にレイジー seq) を操作するコードを書いている場合、ほとんどの場合、シーケンスを操作するだけで全体をより整然と実行できることに注意してください。ただし、インデックスを扱いたいと確信している場合は、次のように簡単(fn [pred coll] (first (keep-indexed (fn [i x] (when (pred x) i)) coll)))
です。