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