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 <[email protected]> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---