'chain' and atom argument

2009-04-22 Thread Tomas Hlavaty
Hi Alex,

   (chain 'lst ..) - lst

is there a reason 'chain' does not work with atoms?

: (make (link 1))
- (1)
: (make (link 1) (chain 2))
- (1)
: (make (link 1) (chain (cons 2 3)))
- (1 2 . 3)
: (make (link 1) (chain 2) (chain (cons 3 4)))
- (1 3 . 4)
: (make (link 1) (chain 2) (chain (cons 3 4)) (chain (cons 5 6)))
- (1 3 5 . 6)

I would expect:

: (make (link 1) (chain 2))
- (1 . 2)

I guess this is not currently achievable using 'make'?

Thank you,

Tomas
-- 
UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe


Re: 'chain' and atom argument

2009-04-22 Thread Tomas Hlavaty
Hi Alex,

 I would expect:

 : (make (link 1) (chain 2))
 - (1 . 2)

 In this respect, 'chain' is analogous, it simply processes the cell
 arguments, and does not preserve any CDRs, as it cannot not know if
 later more elements will be added with 'link' or 'chain'.

Yes, I think the behaviour above is quite simple, natural, logical,
practical and efficient:-D

 I guess this is not currently achievable using 'make'?

 The following would do that

: (make (link 1) (conc (made) 2))
- (1 . 2)

 but is rather inefficient because it traverses the whole (made) list to
 concatenate the '2'.

I see.  Thanks.  I guess that destructively messing with the make
environment in general breaks it, if it is not the last operation on it:

: (make (link 1) (conc (made) 2) (chain (conc 3 4)))
- (1 . 2)

 Anyway, this seems to be a useful feature. It basically just needs the
 exchange of two lines in 'doChain()' in src/subr.c:

do {
   if (isCell(y = EVAL(car(x {
  *Env.make = y;
  do

-

do {
   *Env.make = y = EVAL(car(x));
   if (isCell(y)) {
  do


 Should I keep that change?

Yes please;-)

Thank you,

Tomas
-- 
UNSUBSCRIBE: mailto:picol...@software-lab.de?subject=unsubscribe