On Feb 18, 2:09 pm, Stefan Rusek <sru...@gmail.com> wrote:
> On Wed, Feb 18, 2009 at 8:02 PM, Rich Hickey <richhic...@gmail.com> wrote:
>
> > On Feb 18, 12:20 pm, Frantisek Sodomka <fsodo...@gmail.com> wrote:
> >> How should I say it... It just didn't look "symmetrical" to me.
>
> >> So, basically, there is a difference between functions returning
> >> sequences - depending on if they are lazy or eager. Hmm...
>
> >> user=> (reverse [])
> >> nil
> >> user=> (if (reverse []) true false)
> >> false
> >> user=> (if (seq (reverse [])) true false)
> >> false
>
> >> user=> (lazy-seq nil)
> >> ()
> >> user=> (seq (lazy-seq nil))
> >> nil
> >> user=> (if (lazy-seq nil) true false)
> >> true
> >> user=> (if (seq (lazy-seq nil)) true false)
> >> false
>
> >> As long as I remember which function is lazy and which one is eager, I
> >> should be fine then.
>
> >> Just wanted to really understand it.
>
> > It shouldn't be that subtle. Sequence functions shouldn't return nil
> > unless they are variants of seq/next. I've fixed reverse and sort to
> > return () when passed empty colls - SVN 1294.
>
> > Rich.
>
> Wouldn't it make more sense to to return an empty version of the same
> collection type? That way the following would work more like someone
> would expect.
>
> (conj (rest [1]) 2) -> [2] instead of (2)
>
That's not what I would expect. rest returns a sequence in O(1). It
can't efficiently do otherwise for all collections.
Rich
--~--~---------~--~----~------------~-------~--~----~
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
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
-~----------~----~----~----~------~----~------~--~---