# [Maxima] block, for and variable scope

Robert Willam Grieve sonofthejedi at xtra.co.nz
Sat May 12 19:41:43 CDT 2007

```On Sun, 13 May 2007, Robert Dodier wrote:
> About the curpos problem, I suspect the answer depends on the
> definition of move. Maybe you can post move to the mailing
> list.

Ok, umm, I got it to work, but I have no idea why, as I didn't
change move. Can someone please explain why this now produces
the expected result.
[I've realigned the function defs so they can be read]

(%i6) dispfun(move);
(%t6) move(curpos,dir) := block
(
[curpos:curpos,dir:dir],
if equal(dir,0) then
return(curpos[first(curpos)+1,second(curpos)]) ,
if equal(dir,1) then
return(curpos:[first(curpos),second(curpos)+1]) ,
if equal(dir,2) then
return(curpos:[first(curpos)-1,second(curpos)]) ,
if equal(dir,3) then
return(curpos:[first(curpos),second(curpos)-1])
)
(%o6) [%t6]
(%i7) dotrans(curpos) := block
(
[curpos:curpos],
for i:0 thru 2 do
curpos:move(curpos, i),
return(curpos)
)\$
(%i8) dotrans([0,0]);
(%o8) [0,1]

Which incidentally is what I expected in the first place but
what's the difference, I never changed move. Still, this is
a decent place to begin.

Thanks again
--
Robert W. Grieve <sonofthejedi at xtra.co.nz>
3rd Year, Bachelor of Information Technology
Southern Institute of Technology, Invercargill, New Zealand
"Gold is not all that glitters, not all who wander are lost."
```