first a quesiton about idiomatic code: 

;; provided by book Fogus & Houser, Joy of Clojure
(defn index [coll]
  (cond
    (map? coll) (seq coll)
    (set? coll) (map vector coll coll)
    :else (map vector (iterate inc 0) coll)))

;; book gives this as idiomatic code
(defn pos [needle coll]
  (for [[i val] (index coll)
        :when (= needle val)] i))

;; usage
(let [coll [:0 :1 :2 :3 :4 :5 :4]]
  (pos :4 coll)) ;-> (4 6)

;; how can i make this alternate version better, and why provide :when, given 
filter?
;; is it possible to get the destructuring elegance above without `for` ?
;; is this sequencing property of for (operate on individual values that will 
end up in a seq)
;; the reason `for` exists? is not not possible to do have nice syntax wtihout 
for (or seq-monad)?
(defn pos2 [needle coll]
  (let [pairs (filter (fn [[i val]] (= val needle))
                      (index coll))]
    (for [[i val] pairs] i))) ; can't destructure nicely without for, or 
seq-monad, i think


meta question: where is the best place to ask noob questions like this, and 
also more long-form discussion questions? stackoverflow frowns on questions 
like this. i could slam in a couple of these a day, that doesn't seem 
appropriate here.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to