difference between a cons pain and plain list
Hi all, yes, a lisp newcomer here. looking at the example in the app dev doc: : (h1 '(id . bar) Title) two questions 1) if the cons pair was written as code(id bar)/code instead of as with the example, would h1 treat it different? how? 2) what's the fundamental difference between a cons pair and a simple list? as far as simple symbols go, it would look something like this: (a . b ) == [a, b] (a b) == [a, b, NIL] making it three: 3) when is a cons pair appropriate to use? cheers, /e -- UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe
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 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
Re: difference between a cons pain and plain list
On Tue, Aug 17, 2010 at 09:06:56PM +0800, Edwin Eyan Moragas wrote: 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 | +-+-+ +-+-+ Yes, exactly. -- UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe
Re: script for generating tags for picolisp
Here's one shell script I used to use for that (I called it lisptags) ... hopefully it still works :-) #!/bin/sh # make a tags file for pico lisp source files. # use: # lisptags foo.l bar.l baz.l ... bof.l # generate the file 'tags' # [based on lisptags csh script by John Foderaro, c.1982] awk ' /^[ \t]*\([bd][em][ \t]/ { n=$2; gsub(/^\(/,,n); gsub(/\)$/,,n); print n \t FILENAME \t?^ $0 $?; } /^[ \t]*\(class[ \t]/ { n=$2; gsub(/^\(/,,n); gsub(/\)$/,,n); print n \t FILENAME \t?^ $0 $?; if (n ~ /^\+/) { gsub(/^\+/,,n); print n \t FILENAME \t?^ $0 $?; } } ' $* | sort tags = = = --- On Tue, 8/17/10, Edwin Eyan Moragas e...@yndy.org wrote: From: Edwin Eyan Moragas e...@yndy.org Subject: script for generating tags for picolisp To: picolisp@software-lab.de Date: Tuesday, August 17, 2010, 12:05 AM Hi all, anybody who made an attempt to create such kind of script? or maybe a resource somewhere in the interwebs for this? cheers, /e -- UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe -- UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe