I would like to produce detailed worked solutions for students automatically in Maxima as part of computer aided assessment questions. To do this I would like much finer control over the simplifications which Maxima performs to very elementary expressions. For example, I would like to manipulate expressions such as x + 1 + x, without these automatically being simplified to 2*x+1. To do this I have defined noun forms of the elementry arithmetic operators, eg nary("n+",100); prefix("n-",100); nary("n*",120); infix("n/",122,123); infix("n^",140,139); It is then possible to have expressions such as x n+ 1 n+ x or x n+ n- x I have started to write functions which manipulate them, such as one to convert all operators in an expression to noun form, eg noun_arith(ex) := block( ex:subst("N+","+",ex), ex:subst("N*","*",ex), ex:subst("N-","-",ex), ex:subst("N/","//",ex), ex:subst("N^","^",ex), ev(ex)); I expect this will develop into a library of related functions and so before I start on this in ernest I'd like to discuss this with the list. I think such noun forms would be more generally useful for many other applications. (1) Do such noun forms already exist? (2) Is using the function nary, etc to define these noun forms the correct way to proceed in Maxima? If not, what else should I do? (3) Where can I find information on the binding levels of +, - etc? (Those used above were stolen from the mactex.lisp file.) (4) using factor(2^6-1) returns ((MTIMES SIMP FACTORED) ((MEXPT SIMP) 3 2) 7) How does this relate to the proposed noun forms? (5) I've modified the tex() function to display the noun forms exactly as their verb counterparts through lisp code such as (defprop $n+ tex-mplus tex) (defprop $n+ ("+") texsym) (defprop $n+ 100. tex-lbp) (defprop $n+ 100. tex-rbp) This works surprisingly well, but I'm (not surprisingly) having great difficulty with the unary minus. How can I tell tex() to display these noun forms in an identical way to their namesakes? I've attached two files to give an idea of what progress I have made. Any advice would be very welcome. Chris
Attached file: noun_arith.lisp
Attached file: na.mac