Rich,
My apologies that what I have said about nil punning came across
as criticism directed at you. That was not intentional. I have
the highest respect for your design work. You're doing an amazing
job and I continue to learn from you.
I understand the lazy vs empty issue and I think you made a good
tradeoff. I'm just bemoaning the fact that nil-punning is really
vital in keeping data-type issues out of my lisp life and that
won't work in Clojure.
Ultimately this is cured by deep learning of the language semantics.
I still have a way to go.
Tim Daly
Literate Software
On Fri, 2011-10-21 at 17:03 -0400, Rich Hickey wrote:
> This message is not specifically in reply to Tim, but to the thread in
> general.
>
> It can be very difficult to enumerate (or even remember :) all of the
> contending tradeoffs around something like Clojure's nil handling.
>
> The is no doubt nil punning is a form of complecting. But you don't
> completely remove all issues merely by using empty collections and empty?,
> you need something like Maybe and then things get really gross (IMO, for a
> concise dynamic language).
>
> I like nil punning, and find it to be a great source of generalization and
> reduction of edge cases overall, while admitting the introduction of edges in
> specific cases. I am with Tim in preferring CL's approach over Scheme's, and
> will admit to personal bias and a certain comfort level with its (albeit
> small) complexity.
>
> However, it couldn't be retained everywhere. In particular, two things
> conspire against it. One is laziness. You can't actually return nil on rest
> without forcing ahead. Clojure old timers will remember when this was
> different and the problems it caused. I disagree with Mark that this is
> remains significantly complected, nil is not an empty collection, nil is
> nothing.
>
> Second, unlike in CL where the only 'type' of empty collection is nil and
> cons is not polymorphic, in Clojure conj *is* polymorphic and there can only
> be one data type created for (conj nil ...), thus we have [], {}, and empty?.
> Were data structures to collapse to nil on emptying, they could not be
> refilled and retain type.
>
> At this point, this discussion is academic as nothing could possibly change
> in this area.
>
> The easiest way to think about is is that nil means nothing, and an empty
> collection is not nothing. The sequence functions are functions of collection
> to (possibly lazy) collection, and seq/next is forcing out of laziness. No
> one is stopping you from using rest and empty?, nor your friend from using
> next and conditionals. Peace!
>
> Rich
>
> On Oct 21, 2011, at 4:25 PM, daly wrote:
>
> > On Fri, 2011-10-21 at 15:41 -0400, David Nolen wrote:
> >> Just because we have dynamic types does not give us the freedom to not
> >> consider them.
> >
> > If all of these dynamics types and all of the tests "respected nil"
> > in its many meanings then
> > (when s ...,
> > (when (seq s)...,
> > (when (empty? s)...,
> > would not be an issue. (when s...) would "just work".
> >
> >>
> >>
> >> Clearly express a consideration about the types at play.
> >
> > Clojure was supposed to transparently substitute things like sequences
> > and vectors everywhere that lisp used lists. That would be true if nil
> > was respected but is not true now and this complicates the code without
> > apparent benefit, in my opinion.
> >
> > In lisp you can ask what the type is (e.g. by calling consp, vectorp,
> > etc) but these type-specific predicates are relatively rarely used.
> > In fact, when they are used then you are struggling with data-level
> > issue that could probably be abstracted away (e.g. a code smell).
> >
> > Clojure is a great language but the nil handling is, in my opinion,
> > a design flaw. It forces the introduction of (empty?...) and an
> > awareness of the data types into view unnecessarily.
> >
> > Tim Daly
> > Literate Software
> >
> >
> >
> >
> > --
> > 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
>
--
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