diff options
Diffstat (limited to 'web/spiderweb/src/reduce/README')
-rw-r--r-- | web/spiderweb/src/reduce/README | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/web/spiderweb/src/reduce/README b/web/spiderweb/src/reduce/README new file mode 100644 index 0000000000..0545d0e17d --- /dev/null +++ b/web/spiderweb/src/reduce/README @@ -0,0 +1,69 @@ +REDUCE is a lisp based system for symbolic computation by A. Hearn. +The real lisp is hidden for the user by a pascal like language, called +rlisp, which is parsed and converted to ordinary lisp, when read. +Due to the nature of lisp any expression that returns a value may +appear at almost any place, for instance + +b:=for i:=1:if x then y else z sum a(i)+if c then d else e+ + while x do begin ...; return ...; ... end; + +is a perfectly correct rlisp expression. REDUCE itself and all +available libraries are written in rlisp. Users can also write their +own packages in rlisp, containing both low and high level REDUCE +procedures. + +Besides the ordinary stuff available in almost any computer algebra +program, there are user written packages available for differential +geometry, determining symmetries of differential equations, lie +algebras etc., possibly using non standard data structures based on +lisp objects. + +It will be clear from the rlisp expression given above that one has to +be very careful about what has to appear in math mode and what in text +mode. Moreover some additional indentation for complicated expressions +may be desirable. +The second problem can be solved by carefully implementing the +production rules, the first one we solved by putting everything in +text mode except for the unary and binary operators like +, -, :=, +etc., and applying some tricks to get spaces that cannot be removed by +a cancel. + +Changes necessary to weave and tangle in order to parse rlisp source +code correctly are the following: +- rlisp only knows one kind of string, namely the one surrounded by double + quotes ", whereas a single quote ' is explicitly used as a 'quote'. + This means that the parsing of strings had to be adapted. +- rlisp has an escape character '!', which means that an identifier + may contain any character if it is preceded by an exclamation mark + (in this way identifiers may even contain spaces), hence the parsing + of identifiers had to be altered. +- we changed some things which seemed to be bugs: a) in the debug part of + the weave code we replaced "\\{" by "\\\\{" since our compiler + complained about it, b) "+\equiv" isn't TeX'ed in a very nice way so + we replaced it by a new TeX macro "\PS" to be used for multiply + defined modules. +- a minor change: we like tangle also to print the newlines in macros, so + we #define'd NEWLINES_IN_MACROS. +- rlisp doesn't allow underscores to occur in identifiers, unless + preceded by '!'. Therefore, we postprocess the tangled file in order + to remove the underscores. Indeed this can also be done by changing + tangle.web in the appropriate place, but I think it is more work to + find the exact place where the change has to be made, than writing a + C program that does a similar job. However, if you are more familiar + with tangle than we are and know exactly where to make the change, + feel free to do so (underscores preceded by '!' and in strings + should stay). + +Moreover, previewing the weaved & TeX'ed tangle I discovered what +seems to be a bug in your set of production rules of ceeweave, namely +'extern' followed by two simps seems to be missing a space, whereas +'extern' followed by one simp gives no problem. + +I hope this 'blurb' about REDUCE and the necessary changes is +satisfactory. I have put all necessary files tarred, compressed and +uuencoded at the end of this mail. It is also available by anonymous +ftp from utmfu0.math.utwente.nl (130.89.60.149). + +If you have comments or suggestions on our work, feel free to react. + +Marcel Roelofs. |