"Delayed" problem in mfunction/mmacro definition



Hi All,

I do not understand this MAXIMA behavior:

(%i1) :lisp(MEVAL '((MDEFMACRO) (($F1) $X) ((MQUOTE) $X)))
((MDEFMACRO SIMP) (($F1) $X) ((MQUOTE) $X))
(%i1) F1(y);
(%o1)            X
(should be 'y' instead)

(%i2) :lisp(MEVAL '((MDEFMACRO) (($F2) $X) (QUOTE $X)))
((MDEFMACRO SIMP) (($F2) $X) '$X)
(%i2) F2(y);
(%o2)            X
(should be 'y' instead?)

(%i3) F3(x)::='(x);
(%o3)      F3(x) ::= 'x
(%i4) F3(y);
(%o4)            x
(should be 'y' instead)


I think that every "MACRO" should have maximum of the priority at the
evaluation time (at least for MQUOTE).

In any case: how to make delayed assignment for a function? And how to
free the delay afterwards?

This is important question for definition of Mathematica ":="
(SetDelayed) function for MAXIMA (I thought that 'SetDelayed' could be
interpreted as (MDEFINE) (or (MDEFMACRO)) but with second argument
(MQUOTE)ed and with first argument 'a' --> (MEVAL a) at the evaluation
time BUT found it's not a case).

Thanks,

Andrey S.