[Top][All Lists]
[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