坚持在clojure中寻找索引值

时间:2013-10-25 14:27:24

标签: clojure indexing

我想在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的{​​{1}}。喜欢

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) 的{​​{1}}值吗?

3 个答案:

答案 0 :(得分:1)

 (count (take-while not '(false false false true false false true false)))
 => 3

 (.indexOf '(false true) true)
 => 1

答案 1 :(得分:0)

你自己发布的答案似乎有点过于复杂。它可以简化为:

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

即。 <{1}}的{​​{1}}部分是不必要的。

答案 2 :(得分:-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)