Some time ago Bill Page proposed a patch to eliminate Fortran
names from the output of unparse.  Unfortunatly, his patch
caused regression when printing some types.

AFAICS Bill idea was to use Fortran machinery for unparsing,
but to skip the renaming stage.  Now, I think that ideally
we should not re-use Fortran generating code for unparsing
because Fortran machinery is doing a lot of Fortran specific
things.  In fact, I think that uparsing should work in
a quite different way: 
1) we should first walk the expression tree and compute priority
   at each node
2) based on 1 we should mark places where we need to insert
   parentheses -- in this step we probably should add various
   symbols as markup, but we should still keep tree in symbolic
   form
3) Only in final step we should generate string from the tree,
   just by simple walk which collects translations of separate
   symbols.

In principle steps 1 and 2 are similar for all output formats,
so we could use generic setup for them (of course values of
priorities may depend on output format).  Ideally, much of
step 3 could be re-used.

However, I think that we have much more urgent tasks than
re-write of output routines.  In particular unparse has
only little use.  So I propose to apply a variation of Bill's
patch.  Compared to Bill I am using Fortran machinery only
for binary operators (like current code).  Also, I am
setting a few variables used by Fortran machinery -- I do
not have a testcase, but I expect that on complicated
expressions Fortran machinery will fail if those variables
have no value.

diff -ru --exclude=.svn trunk.bb/src/input/i-bugs2008.input.pamphlet 
trunk/src/input/i-bugs2008.input.pamphlet
--- trunk.bb/src/input/i-bugs2008.input.pamphlet        2008-09-03 
00:06:07.000000000 +0200
+++ trunk/src/input/i-bugs2008.input.pamphlet   2008-09-03 00:05:22.000000000 
+0200
@@ -34,6 +34,11 @@
 -- regression in printing Gamma
 Gamma(2,3)
 
+-- Strange case of linear printing
+K := Fraction Integer
+g := matrix [[1,0,0,0], [0,-1,0,0], [0,0,-1,0], [0,0,0,-1]]
+D := CliffordAlgebra(4,K, quadraticForm g)
+
 @
 \eject
 \begin{thebibliography}{99}
diff -ru --exclude=.svn trunk.bb/src/interp/format.boot 
trunk/src/interp/format.boot
--- trunk.bb/src/interp/format.boot     2008-09-03 00:06:07.000000000 +0200
+++ trunk/src/interp/format.boot        2008-09-03 00:07:38.000000000 +0200
@@ -428,10 +428,15 @@
     argl := rest argl
     (null argl) or null (first argl) => [lo, '".."]
     [lo, '"..", form2String1 first argl]
-  isBinaryInfix op => fortexp0 [op,:argl]
-  -- COMPILED_-FUNCTION_-P(op) => form2String1 coerceMap2E(u1,NIL)
+  isBinaryInfix op => binop2String [op,:argl]
   application2String(op,[form2String1 x for x in argl], u1)
 
+binop2String x ==
+    $exp2FortTempVarIndex : local := 0
+    $fortName : fluid := newFortranTempVar()
+    $fortInts2Floats : fluid := nil
+    fortranCleanUp exp2Fort1 exp2FortOptimize x
+
 formWrapId id == 
   $formatSigAsTeX = 1 => id
   $formatSigAsTeX = 2 => 


-- 
                              Waldek Hebisch
[EMAIL PROTECTED] 

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/fricas-devel?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to