On 4/27/07, Barton Willis <willisb at unk.edu> wrote:
>
> The 'take' macro (defined in mopers.lisp) special cases
> the operators mabs, %cos, and a few more. For these
> cases, 'take' sends the expression directly to the
> simplification function instead of going through
> simplifya. I think this could cause bugs with tellsimp:
I think you are right. I wrote the take macro in 1974 or so and probably
was over-concerned with efficiency and under-concerned with the effects on
tellsimp etc.
(defmacro take (op &rest args &aux simplifier)
> (if simplifier `(,simplifier (list ,operator . ,args) 1 t)
> `(simplifya ((,op) , at args) t)))
&aux is just a way of defining local variables -- shortcut for (let (...)
...) -- so you can remove that entirely.
As for
`(simplifya ((,op) , at args) t)))
this should be
`(simplifya (list '(,op) , at args) t)
I suppose there must be some way to do this with nested backquotes, but I
would rather avoid that complication.
I don't know if the bugs you got were because of this; they don't look
related.
-s