From: Christian Drescher
Subject: recursive problem
Date: 
Message-ID: <coo2gq$44a$1@zeppelin.rz.uni-potsdam.de>
(DEFUN rebuild (tree)
(COND
 ((ATOM tree) tree)
 (T (APPEND (CONS (cadr tree) NIL)
            (CONS (rebuild (car tree)) NIL)
            (rebuild (cddr tree)) )) ))

</code>

I try to rebuild an infix noted list to an prefix noted like this:

First, I get arithmetik input this way:
(1 + (2 - 1))

Now, I want it evaluable:
(+ 1 (- 2 1))

But there is a problem with CDDR ... (CDDR tree) returns a list everytime, 
so that the function returns:
(+ 1 NIL (- 2 NIL 1))

Help, please. 

From: Thomas A. Russ
Subject: Re: recursive problem
Date: 
Message-ID: <ymi1xe8737t.fsf@sevak.isi.edu>
"Christian Drescher" <············@gmx.net> writes:

> 
> (DEFUN rebuild (tree)
> (COND
>  ((ATOM tree) tree)
>  (T (APPEND (CONS (cadr tree) NIL)
>             (CONS (rebuild (car tree)) NIL)
>             (rebuild (cddr tree)) )) ))
> 
> </code>
> 
> I try to rebuild an infix noted list to an prefix noted like this:
> 
> First, I get arithmetik input this way:
> (1 + (2 - 1))
> 
> Now, I want it evaluable:
> (+ 1 (- 2 1))
> 
> But there is a problem with CDDR ... (CDDR tree) returns a list everytime, 

just like it is supposed to.  Remeber that

 (CDDR x)  <=>     (CDR (CDR x))

> so that the function returns:
> (+ 1 NIL (- 2 NIL 1))
> 
> Help, please. 

You probably want CADDR.

or better yet, you probably want to use SECOND, FIRST and THIRD :)

-- 
Thomas A. Russ,  USC/Information Sciences Institute
From: David Sletten
Subject: Re: recursive problem
Date: 
Message-ID: <ExNrd.2631$nP1.2117@twister.socal.rr.com>
Christian Drescher wrote:

> (DEFUN rebuild (tree)
> (COND
>  ((ATOM tree) tree)
>  (T (APPEND (CONS (cadr tree) NIL)
>             (CONS (rebuild (car tree)) NIL)
>             (rebuild (cddr tree)) )) ))
> 
> </code>
> 
> I try to rebuild an infix noted list to an prefix noted like this:
> 
> First, I get arithmetik input this way:
> (1 + (2 - 1))
> 
> Now, I want it evaluable:
> (+ 1 (- 2 1))
> 
> But there is a problem with CDDR ... (CDDR tree) returns a list everytime, 
> so that the function returns:
> (+ 1 NIL (- 2 NIL 1))
> 
> Help, please. 
> 
> 
This is homework?

You are dealing with lists of the form: (<expr> <op> <expr>) where each 
of the operands may itself be a list. So you are right, this potentially 
requires recursive processing, but not as much you think. There are only 
3 top-level elements in your list. You need to process the FIRST and 
THIRD (hint), but the SECOND just gets moved.

The preceding assumes that your expressions are fully parenthesized:
(rebuild '(((3 * 5) + 9) - 1)) => (- (+ (* 3 5) 9) 1)
If this is not the case:
(rebuild '(3 * 5 + 9 - 1))
then you have more work to do.

David Sletten
From: Christian Drescher
Subject: Re: recursive problem
Date: 
Message-ID: <copql9$57p$1@zeppelin.rz.uni-potsdam.de>
"David Sletten" <·····@slytobias.com> schrieb im Newsbeitrag 
························@twister.socal.rr.com...
> Christian Drescher wrote:
>
>> (DEFUN rebuild (tree)
>> (COND
>>  ((ATOM tree) tree)
>>  (T (APPEND (CONS (cadr tree) NIL)
>>             (CONS (rebuild (car tree)) NIL)
>>             (rebuild (cddr tree)) )) ))
>>
>> </code>
>>
>> I try to rebuild an infix noted list to an prefix noted like this:
>>
>> First, I get arithmetik input this way:
>> (1 + (2 - 1))
>>
>> Now, I want it evaluable:
>> (+ 1 (- 2 1))
>>
>> But there is a problem with CDDR ... (CDDR tree) returns a list 
>> everytime, so that the function returns:
>> (+ 1 NIL (- 2 NIL 1))
>>
>> Help, please.
> This is homework?
>
> You are dealing with lists of the form: (<expr> <op> <expr>) where each of 
> the operands may itself be a list. So you are right, this potentially 
> requires recursive processing, but not as much you think. There are only 3 
> top-level elements in your list. You need to process the FIRST and THIRD 
> (hint), but the SECOND just gets moved.
>
> The preceding assumes that your expressions are fully parenthesized:
> (rebuild '(((3 * 5) + 9) - 1)) => (- (+ (* 3 5) 9) 1)
> If this is not the case:
> (rebuild '(3 * 5 + 9 - 1))
> then you have more work to do.
>
> David Sletten

Yeah, my expressions are fully parenthesized. I will fix my work later, but 
I know - thanks to you - THIRD or rather CADDR should be the solution.

Thanks.