simplifying functions & noevalargs



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