我想在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}}值吗?
答案 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)