[Maxima] block, for and variable scope
macrakis at alum.mit.edu
Sun May 13 08:17:21 CDT 2007
On 5/12/07, Robert Willam Grieve <sonofthejedi at xtra.co.nz> wrote:
> 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 don't know why you're now getting the expected result, but here are some
hints on using the Maxima language:
> (%t6) move(curpos,dir) := block
Function parameters are already local to the function, so you don't need to
rebind them this way. In fact, you don't need a block at all.
if equal(dir,0) then
I assume that dir is always a number 0-3, in which case you can use "="
You can use an if/then/else instead of a series of if/then, making it one
Then you don't need "return" -- the value of the last expression in a block
is returned as the block's value.
You can add vectors componentwise (if listarith is true, the default) with
"+" e.g. curpos+[1,0].
You don't need to assign to curpos.
Since all clauses are curpos+xxx, you can move the conditional inside, that
curpos + ( if dir=0 then [1,0] ...)
And why not keep the direction vectors in an array or list?
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
It is good practice to have an "else" to catch errors.
I won't write out the result of applying these hints, in case this is a
homework assignment.... But I will tell you that the result is one short
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Maxima