block



Stavros Macrakis pisze:
> On Fri, Apr 18, 2008 at 3:59 AM, Adam Majewski <adammaj1 at o2.pl> wrote:
>>  LastIteration(x,y):=
>>  block
>>  (
>>  z:x+y*%i,
>>  i:0,
>>  if (abs(z)>ER) then return(i),
>> loop,
>>  z:z*z,
>>  i:i+1,
>>  if ((abs(z)<ER) and (i<iMax)) then go(loop),
>>  return(i)
>>  );
> 
> This definition can be improved in several ways.  First of all, Maxima
> syntax requires block-local variables to be in a *list* e.g.
> block([x:3],...).  Otherwise they are not block-local at all.
> Secondly, the first if-condition is redundant. And third, Maxima
> offers the "while" construct to make the loop somewhat clearer:
> 
> LastIteration(x,y):=
>   block([z:x+y*%i,i:0],
>     while abs(z)<ER and i<iMax
>        do (z:z*z,i:i+1),
>     i)$
> 
> or even
> 
> LastIteration(x,y):=
>   block([z:x+y*%i,i:0],
>     while (i:i+1)<iMax  and abs(z:z*z)<ER do 1,
>     i)$
> 
> Even more like pseudo-code, I daresay.
> 
>         -s
Thank you very much.
I was reading doc but ...(:-))
2 things ( except of course while loop) are new for me:
- you do not use return
- you use () without block, and it works

Adam