Without changing meval (or friends) is it possible to define a
simplifying function that doesn't get its arguments evaluated
before the call to the simplifying function? I'm aware of
'novealargs,' but I don't know how to set it to true for the
duration of meval.
I was _playing_ with the idea of building a simplifying version
of sum such as
(defprop $xsum simp-xsum operators)
;; Simplify a xsum.
(defun simp-xsum (a y z)
(cond ((not (memq 'simp (car a)))
....)
By the time simp-xsum gets called, the arguments to xsum
have already been evaluated. This gives silliness
such as:
assume(k < 0,n > 0, m > n)
xsum(abs(k),k,n,m) --> xsum(-k,k,n,m) --> Yeechs!
(This example is due to Stavros.) We need to evaluate abs(k)
in an environment where k > 0, not the global environment where
k < 0. Presumably, it's possible to do this with contexts.
Barton