Re: difference between a cons pain and plain list

Hi Alex,

On Tue, Aug 17, 2010 at 8:34 PM, Alexander Burger <a...@software-lab.de> wro=
te:
>>
>> (a . b ) =3D=3D> [a, b]
>> (a b) =3D=3D> [a, b, NIL]
>
> Well, it depends how your '[' and '[' notation is interpreted. I would
> draw it as cell boxes. (a . b) is a single cell (two pointers), with 'a'
> in the CAR and 'b' in the CDR:
>
> =A0 +-----+-----+
> =A0 | =A0a =A0| =A0b =A0|
> =A0 +-----+-----+
>
> while (a b) consists of two cells, where the CDR of the second cell is
> NIL:
>
> =A0 +-----+-----+ =A0 =A0 +-----+-----+
> =A0 | =A0a =A0| =A0---+---->| =A0b =A0| NIL |
> =A0 +-----+-----+ =A0 =A0 +-----+-----+

thank you for this. clearer now. this is how it is implemented in
picolisp underneath, right? (from pico.h)

so if i had a different base data structure, it wouldn't be like this?
say in other lisp implementations?

reason i'm asking is that if i had arrays as base structures in C

+-----+-----+
|  s  |  t  |
+-----+-----+

and a list as:

+-----+-----+-----+
|   s  |  t  | NIL  |
+-----+-----+-----+

>
>
>> 3) when is a cons pair appropriate to use?
>
> When you have data structures that typically appear in pairs. A good
> example are two-dimensional coordinates, x and y. You can put a single
> coordinate into a single cell (x . y) instead of a two-element list (x
> y), as you know there will never be a third element.
>
> In that way you save half of the space.
>
> A three-dimensional coordinate, btw, could be put into a two-cell
> structure (x y . z), needing only two cells instead of three.

like so?

+-----+-----+     +-----+-----+
|  x  |  ---+---->|  y  |  z  |
+-----+-----+     +-----+-----+

>
> Besides saving memory, cons pairs also make access easier sometimes. To
> access the 'z' in (x y . z) you can use the function 'cddr', doing two
> pointer dereferences. To access it in (x y z), you need three pointer