summaryrefslogtreecommitdiff
path: root/web/spiderweb/src/reduce/README
diff options
context:
space:
mode:
Diffstat (limited to 'web/spiderweb/src/reduce/README')
-rw-r--r--web/spiderweb/src/reduce/README69
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.