Subject: "Delayed" problem in mfunction/mmacro definition
From: Siver Andrey
Date: Sun, 14 Nov 2004 13:07:51 +0300
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.