[Ecls-list] Maxima + ECL
Robert Dodier
robert.dodier at gmail.com
Sun Jan 13 16:17:38 UTC 2008
On 1/13/08, Juan Jose Garcia-Ripoll
<juanjose.garciaripoll at googlemail.com> wrote:
> In particular one needs reproducible cases. ECL reads perfectly fine
> the symbol ".n." when I type it, how and when does this happen?
Here is the macro DEFMFUN (slightly abbreviated) from Maxima.
(defmacro defmfun (function &body rest &aux .n.)
(cond ((and (car rest) (symbolp (car rest)))
;;old maclisp narg syntax
(setq .n. (car rest))
(setf (car rest)
`(&rest narg-rest-argument &aux (, .n. (length
narg-rest-argument))))))
`(progn
(defun ,function . ,rest)))
Here is what I get in a fresh ECL session. /tmp/defmfun.lisp contains
just the macro definition shown above.
> (load "/tmp/defmfun.lisp")
;;; Loading "/tmp/defmfun.lisp"
"/tmp/defmfun.lisp"
> (macroexpand '(defmfun foo n (print (arg 0))))
The variable N. is unbound.
Broken at EVAL.No restarts available.
Broken at DEFMFUN.
Now if I change the symbol .n. to ecl-foo-.n. then I see this:
> (macroexpand '(defmfun foo n (print (arg 0))))
(PROGN
(DEFUN FOO (&REST NARG-REST-ARGUMENT &AUX (N (LENGTH NARG-REST-ARGUMENT)))
(PRINT (ARG 0))))
T
... which is to be expected.
Thanks for your help,
Robert
More information about the ecl-devel
mailing list