Revision: 12995
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 3, 2009 12:13 by narkisr
Initial Code
(defn permutations "creates a sequence of all permutations of multiple sequences" [curr-seq & rest-seqs] (if (nil? rest-seqs) (map #(cons % '()) curr-seq) (reduce concat (map (fn [curr-seq-val] (map #(cons curr-seq-val %) (apply permutations rest-seqs))) curr-seq)))) (defmacro mydoseq "Uses reduce to implement doseq" [forms & body] (let [form-pairings (partition 2 forms) vars (vec (map #(first %) form-pairings)) assignments (map #(second %) form-pairings)] `(reduce (fn ~'[nothing args] (apply (fn ~vars ~@body) ~'args)) nil (permutations ~@assignments)))) user=> (doseq [a '(3 4 5 6)] (println (+ a 2))) 5 6 7 8 nil user=> (mydoseq [a '(3 4 5 6)] (println (+ a 2))) 5 6 7 8 nil
Initial URL
Initial Description
Two alternative implementations of Clojure doseq utilising map & reduce functions (http://groups.google.com/group/clojure/browse_thread/thread/d6eb04c87bdd000f?hl=en).
Initial Title
Clojure alternative doseq implementation (using reduce).
Initial Tags
Initial Language
Lisp