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 instead of linked cells, a dotted pair would look something like: +-----+-----+ | s | t | +-----+-----+ and a list as: +-----+-----+-----+ | s | t | NIL | +-----+-----+-----+ is this a possible way to think about this or am i just chasing windmills? > > >> 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 > operations (i.e. 'caddr'). > > Basically, you are free to decide your data structure depending on the > application. Sometimes a list has advantages over a pair, for example > when you need uniform access (e.g. 'mapping' over the list). thank you for taking time to answer my silly questions. /e -- UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe