[Ecls-list] set-macro-character doesn't affect current reader??
goffioul at imec.be
Thu Nov 18 07:53:04 UTC 2004
I tried to create a macro reader for '$' in ECL using the
(defvar +database+ (make-hash-table))
(setf (gethash 's1 +database+) "value1")
(setf (gethash 's2 +database+) "value2")
(defun dollar-macro-reader (stream char)
(declare (ignore char))
(let ((sym (read stream t nil t)))
`(gethash ',sym +database+)))
(set-macro-character #\$ #'dollar-macro-reader t)
Then I use it in ECL prompt as in the following session:
ECL (Embeddable Common-Lisp) 0.9d
Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
Copyright (C) 1993 Giuseppe Attardi
Copyright (C) 2000 Juan J. Garcia-Ripoll
ECL is free software, and you are welcome to redistribute it
under certain conditions; see file 'Copyright' for details.
Type :h for Help. Top level.
> (load "testmacro")
;;; Loading #P"testmacro.lisp"
> (print $s1)
The variable $S1 is unbound.
Broken at EVAL.
As you can see, during the loading, the new macro character is
used, but not from the prompt. Trying this under CLISP, it works
fine. Is this a bug or the intended behavior?
More information about the ecl-devel