I definitely like this version a little better. If you change the else
of the if to be just (list), it returns the empty list just as core/
flatten does. Mind if I update the ticket with this patch?

On Jul 14, 1:56 pm, miner <stevemi...@gmail.com> wrote:
> I think it's worthwhile to have a faster flatten even if it doesn't
> look as elegant as the current implementation.  You could do a bit of
> refactoring and save yourself a call to sequential? since the
> recursive calls are guaranteed to have seqs (as a result of next).
>
> Also, I'd prefer flatten to return the argument if it isn't
> sequential? so for example, (flatten 10) ==> 10.  I think it would be
> less likely to give mysterious results, especially with mistaken
> arguments.  I understand that the current flatten for 1.2 beta doesn't
> do this -- I'm just throwing in another suggestion after playing with
> it for a while.
>
> Here's my suggestion:
>
> (defn fl1 "faster flatten" [coll]
>   (letfn [(flcoll [coll]
>                  (lazy-seq
>                   (when-let [c (seq coll)]
>                     (let [x (first c)
>                           nxt (flcoll (next c))]
>                       (if (sequential? x)
>                         (concat (flcoll x) nxt)
>                         (cons x nxt))))))]
>     (if (sequential? coll) (flcoll coll) coll)))

-- 
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