-1

clojure関数から値の最初のインデックス値のみを返すプログラムを作成したいと考えてtrueいます。私のコードはここにあります:

 (defn func [f x] (map f x))

したがって、次のような値を指定すると:

(func zero? [1 1 1 0 3 7 0 2])

それは私に与えます:

(false false false true false false true false)

そして、私が与える場合:

(func (fn [n] (= n 6)) [:cat :dog :six :blorg 6]) 

戻り値:

(false false false false true)

しかし、私が欲しいのはindex valueのですfirst true。のように

(func zero? [1 1 1 0 3 7 0 2]) => 3 (desired result)
(func (fn [n] (= n 6)) [:cat :dog :six :blorg 6]) => 4 (desired result)
(func zero? [1 1 3 7 2]) => nil (desired result)

first indexの値を取得する方法を提案できる人はいますtrueか?

4

3 に答える 3

0

自分で投稿した回答は、少し複雑すぎるようです。これは次のように簡略化できます。

(defn first-indexed [pred coll]
  (first (keep-indexed (fn [idx itm]
                         (when (pred itm)
                           idx))
                       coll)))

つまり、のtrue? (vec (map部分tunは不要です。

于 2013-10-25T15:41:58.457 に答える
-1

さて、私は自分の質問自体に対する答えを見つけました:

(defn indices [pred coll]
  (keep-indexed #(when (pred %2) %1) coll))

  (defn tun [f x]
    (first (indices true? 
              (vec (map f x))))) 

もしそうなら:

(tun zero? [1 1 3 7 2]) => nil (the exact desired result) 
于 2013-10-25T15:02:35.800 に答える