I believe the flatten in contrib is defined as follows. I can't remember which module I found it in.
(defn flatten "Takes any nested combination of sequential things (lists, vectors, etc.) and returns their contents as a single, flat sequence. (flatten nil) returns nil." [x] (filter (complement sequential?) (rest (tree-seq sequential? seq x)))) -Travis On Sep 2, 3:33 pm, Krukow <karl.kru...@gmail.com> wrote: > Hello, > At some point I needed at "flatten" function taking a list of atomic > elements or nested lists, and producting a "flat" list of only atomic > elements (in the same order). It should be lazy. > > This is what I came up with. Can anyone see a more elegant solution (I > feel I am working "low-level" somehow). > > user> (defn flatten [lst] > (lazy-seq > (if (empty? lst) lst > (let [[x & xs] lst] > (if (list? x) > (concat (flatten x) (flatten xs)) > (cons x (flatten xs))))))) > #'user/flatten > user> (flatten '(1 2 3 4)) > (1 2 3 4) > user> (flatten '((1 2) (3) 4)) > (1 2 3 4) > user> (flatten '(((1) 2) (3) 4)) > (1 2 3 4) > user> > > /Karl --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---