From: Cliff Y. <sta...@us...> - 2005-05-25 08:00:42
|
Update of /cvsroot/maxima/maxima/share/contrib/unit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3892 Modified Files: unit.mac Log Message: Fixed up convert - it now works as expected for the convert(2*N,dyn) case. Added extra isunit check - not currently needed, since isunit throws error on its own right now, but I'm not sure about that design decision so I added a little extra insurance while I was at it. ratprint is now local to processunits while preserving the value of ratprint outside processunits, rather than simply resetting it to true. Index: unit.mac =================================================================== RCS file: /cvsroot/maxima/maxima/share/contrib/unit/unit.mac,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- unit.mac 25 May 2005 03:26:15 -0000 1.26 +++ unit.mac 25 May 2005 08:00:22 -0000 1.27 @@ -522,8 +522,10 @@ /* This command is used to do final global simplification of units */ -processunits(expression) := block([letrat:true,unitrules,result1], +processunits(expression) := block([letrat:true,unitrules,rattemp,result1], + rattemp : ratprint, if ?equal(unitverbose,off) then (ratprint:false), + if ?equal(unitverbose,on) then (ratprint:true), unitformatresults:true, if ?equal(currentdoeval,true) then ( result1 : letsimp(expression,derivedtoMKSrules), @@ -542,10 +544,11 @@ ) else ( result1 : expression), currentdoeval : true, + ratprint : rattemp, result1); /* This function is used to reset variables for the next calculation */ -resetunitvars(args) := block(unitformatresults:false,ratprint:true,args); +resetunitvars(args) := block(unitformatresults:false,args); /*====================== User Functions ======================*/ @@ -731,6 +734,7 @@ if (not(isbase(desiredunits[i])) and (isunit(desiredunits[i]))) then ( makeMKStoderivedrules(desiredunits[i],unitlistname,convertrules) ) else ( + if isunit(desiredunits[i]) then ( flag : 0, j:0, while ?equal(flag,0) do ( j : j+1, @@ -740,12 +744,16 @@ if ?equal(j, length(ev(unitlistname))) then (flag : 1) ), makeMKStobaserules(currentunitlist,unitlistname,convertrules) + ) else ( + error("Non unit argument to convert")) )), - result1 : letsimp(expression,convertrules) + result1 : letsimp(expression,derivedtoMKSrules), + result1 : letsimp(result1,basetoMKSrules), + result1 : letsimp(result1,convertrules) ) else ( error ("Error - two or more of these units describe the same dimension.")) ) else ( - error ("Error - argument to setunits must be a list of units or the argument MKS."))), + result1 : convert(expression,[desiredunits]))), currentdoeval : false, /* This tells processunits not to simplify for this operation only */ result1); @@ -794,7 +802,6 @@ /* This file contains the lisp level definitions required to properly work with units */ -/*load("contrib/unit/unit-functions.lisp")$*/ load("contrib/unit/unit-functions.lisp")$ print("Initializing unit arrays..."); |