chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] list vs dotted-list


From: John Cowan
Subject: Re: [Chicken-users] list vs dotted-list
Date: Thu, 11 Nov 2010 12:25:02 -0500
User-agent: Mutt/1.5.18 (2008-05-17)

Yi DAI scripsit:

> Why do we have both list and dotted-list, given that the former is just a
> special case (terminated by nil) of the latter? Can we simply live with the
> latter?

Conceptually, lists are the basic functional programming data structure:
sequential with O(n) access and shareable (in Lisp/Scheme, also mutable).
For historical reasons, lists are not primitive in Scheme but are
implemented using pairs, and this fact is exposed to Scheme programmers.

Dotted-lists are basically an artifact of that implementation strategy.
In statically typed functional languages like ML or Haskell, they are
not permitted.  Even in Lisp/Scheme, they are not often used (even the
use of plain pairs is relatively uncommon except in a-lists).

> I see it is fairly easy to write common list procedures, like
> `length', `map', `append' etc that could handle dotted-list very well, with
> the predicate `pair?'. 

Not so much.  Map and append operate on every element of a list, but
is the dotted element of a list part of it or not?  What is the proper
value of (append '(a b . c) '(d e . f))?  Not (a b . c d e . f), for
that is meaningless.

In Common Lisp there is a predicate "endp" (which would be spelled "end?"
in Scheme) that returns true on (), false on a pair, and signals an
error on any other argument.  It's convenient for dealing with lists
element by element that should not be dotted but still might be.

-- 
With techies, I've generally found              John Cowan
If your arguments lose the first round          http://www.ccil.org/~cowan
    Make it rhyme, make it scan                 address@hidden
    Then you generally can
Make the same stupid point seem profound!           --Jonathan Robie



reply via email to

[Prev in Thread] Current Thread [Next in Thread]