-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 valuefirst 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

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

 (.indexOf '(false true) true)
 => 1
于 2013-10-25T14:30:58.087 回答
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 回答