bug in mdefmacro?



Am 18 Dec 2005 um 9:30 hat Robert Dodier geschrieben:

> Hi Volker,
> 
> > (C1) foo(x)::= block( [x:ev(x)], print(x) )$
> > (C2) block( [a:1], foo(a) );
> > 1  (this is what I want)
> > (D2)                                   1
> > (C3) block( [x:1], foo(x) );
> > x  (not wanted)
> > (D3)                                   1
> 
> I think this is working just as intended. 

Hello Robert,
I am not really happy with your answer.

Can you or someone else please explain the difference between the following Lisp and 
Maxima code. Thank you.

MAXIMA> (defmacro parallel (x y u v)
   `(progn (setf ,x ,(meval y)) (setf ,u ,(meval v))))
PARALLEL
MAXIMA> (setf x 1)
1
MAXIMA> (setf y 2)
2
MAXIMA> (macroexpand-1 '(parallel x y y x))
(PROGN (SETF X 1) (SETF Y 2))
MAXIMA> (parallel x y y x)
1
MAXIMA> x
2
MAXIMA> y
1

(C1) parallel(x,y,u,v)::= buildq(
      [ x, y:ev(y), u, v:ev(v) ],
      block( x:y, u:v ))$
(C2) x:1$
(C3) y:2$
(C4) macroexpand( parallel(x,y,y,x) );
(D4)              BLOCK(x : y, y : x)
(C5) parallel(x,y,y,x)$
(C6) x;
(D6)                  2
(C7) y;
(D7)                  2