difference between a cons pain and plain list

2010-08-17 Thread Edwin Eyan Moragas
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

2010-08-17 Thread Edwin Eyan Moragas
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

2010-08-17 Thread Alexander Burger
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

2010-08-17 Thread Doug Snead
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