From: Litvinov S. <sli...@gm...> - 2014-04-27 21:19:42
|
For some functions in src/rat3e.lisp the state of global variable ?genvar is modified and is used on the next call: (%i1) ?print(rat(a))$ ((MRAT SIMP ($A) (#:A16349)) (#:A16349 1 1) . 1) (%i2) ?print(?genvar)$ (#:A16349) (%i3) ?print(rat(42))$ ((MRAT SIMP NIL (#:A16349)) 42 . 1) I think it is so by design and is probably OK. But `letsimp' assumes that ?genvar and ?varlist are in consistent state. Note that ?varlist is modified by `meval*` (src/suprv1.lisp). The following example is OK because meval* is not called between `ratexpand' and `letsimp' (%i1) let(U,T); (%o1) U --> T (%i2) (ratexpand(a*b*c), print(?genvar), print(?varlist), letsimp(U/n)); (a16349, b16350, c16351) (a, b, c) T (%o2) - n This gives a wrong result (%i1) let(U,T)$ (%i2) ratexpand(a*b*c)$ (%i3) ?print(?genvar)$ (#:A16349 #:B16350 #:C16351) (%i4) ?print(?varlist)$ NIL (%i5) letsimp(U/n); (%o5) 1 (%i5) build_info(); (%o5) Maxima version: "branch_5_33_base_1_g4fcaa85" Maxima build date: "2014-04-04 00:58:37" Host type: "x86_64-unknown-linux-gnu" Lisp implementation type: "CLISP" Lisp implementation version: "2.49 (2010-07-07) (built 3577466571) (memory 3605554722)" |
From: Robert D. <rob...@gm...> - 2014-04-28 03:23:09
|
On 2014-04-27, Litvinov Sergey <sli...@gm...> wrote: > This gives a wrong result > > (%i1) let(U,T)$ > (%i2) ratexpand(a*b*c)$ > (%i3) ?print(?genvar)$ > > (#:A16349 #:B16350 #:C16351) > (%i4) ?print(?varlist)$ > > NIL > (%i5) letsimp(U/n); > (%o5) 1 I find that ev (letsimp(U/n), letvarsimp=true); yields T/n as expected. Not sure what to conclude from this; maybe the default value of letvarsimp should be true? In any event, making use of the special variables from another package seems like inviting trouble ... I don't know enough about the letrules package to know if there's a way around it. best Robert Dodier |
From: Litvinov S. <sli...@gm...> - 2014-04-28 10:03:43
|
Robert Dodier <rob...@gm...> writes: > I find that ev (letsimp(U/n), letvarsimp=true); yields T/n as expected. `letvarsimp' does not help in the following case. I call `ratexpand' two times to populate ?genvar in "right" way to break `letsimp' (%i1) let(Ua*Ub, T)$ (%i2) (e: ratexpand(a*b*c), e: ratexpand(sin(e)))$ (%i3) ?print(?genvar)$ (#:|sin(a*b*c)16352| #:A16349 #:B16350 #:C16351) (%i4) ev(letsimp((Ua*Ub)/n), letvarsimp=true); (%o4) 1 |
From: Richard F. <fa...@be...> - 2014-04-28 10:23:43
|
I think that if you use let then letsimp, you will be ok. Don't use rat, ratsimp, ratexpand after the let and before the letsimp. That shouldn't be too hard to do. While it should work anyway, letsimp seems to be mostly unused. It is not a very large or complicated package and could be fixed or rewritten as an undergraduate project. RJF On 4/28/14 3:03 AM, Litvinov Sergey wrote: > Robert Dodier <rob...@gm...> writes: > >> I find that ev (letsimp(U/n), letvarsimp=true); yields T/n as expected. > `letvarsimp' does not help in the following case. I call `ratexpand' two > times to populate ?genvar in "right" way to break `letsimp' > > (%i1) let(Ua*Ub, T)$ > (%i2) (e: ratexpand(a*b*c), > e: ratexpand(sin(e)))$ > (%i3) ?print(?genvar)$ > > (#:|sin(a*b*c)16352| #:A16349 #:B16350 #:C16351) > (%i4) ev(letsimp((Ua*Ub)/n), letvarsimp=true); > (%o4) 1 > > > ------------------------------------------------------------------------------ > "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE > Instantly run your Selenium tests across 300+ browser/OS combos. Get > unparalleled scalability from the best Selenium testing platform available. > Simple to use. Nothing to install. Get started now for free." > http://p.sf.net/sfu/SauceLabs > _______________________________________________ > Maxima-discuss mailing list > Max...@li... > https://lists.sourceforge.net/lists/listinfo/maxima-discuss |