02.03.2018, 21:05, "Robert Goldman" rpgoldman@sift.net:
You might be interested to know that ACL binds *readtable* on startup to an unmodifieble readtable (which is a violation of CLHS http://clhs.lisp.se/Body/02_aac.htm : "The initial readtable is distinct from the standard readtable. It is permissible for a conforming program to modify the initial readtable.")
I don't see this behavior in ACL 10.1 (64 bit) on the Mac:
CL-USER> *readtable* #<readtable @ #x100022d3a2> CL-USER> (defun semicolon-reader (stream char) (declare (ignore char)) ;; First swallow the rest of the current input line. ;; End-of-file is acceptable for terminating the comment. (do () ((char= (read-char stream nil #\Newline t) #\Newline))) ;; Return zero values. (values)) SEMICOLON-READER CL-USER> (set-macro-character #; #'semicolon-reader) T CL-USER>
Turns out this only happens when your code is evaluated via the -ee parameter with -batch parameter preset:
~/lisps/acl100/alisp -batch -ee "(set-dispatch-macro-character ## #\u #'(lambda (&rest ignored)))"
An unhandled error occurred during initialization: An error occurred (Attempt to set dispatch macro in system readtable #<readtable @ #x2012072a>; copy readtable first.) during the reading or evaluation of -e "(set-dispatch-macro-character #\# #\u #'(lambda (&rest ignored)))"