Dear Erik,
Based on your input, I have been thinking more about making my interface case sensitive. It would be better. After doing a little research I tried:
(setf (readtable-case *readtable*) :invert)
This seems to have made all the standard stuff ("car, cons, etc.") lowercase as I'd prefer. After that I tried creating lists:
(setq x '(HELLO There how))
and the case seems to be preserved - not inverted.
I also tried things like:
(defun fun (x) (+ 1 x)) (defun Fun (x) (+ 2 x)) (defun FUN (x) (+ 3 x))
And it worked as expected. I'm a bit confused. Why aren't symbols (as in '(HELLO There how)) inverted? (I understand that :invert doesn't change case on mixed case symbols but then all upper or all lower should be inverted.) Is *print-case* being affected?
At first test, it seems like :invert does exactly what most people want - case sensitive lisp that has system symbols all lower case. Are there instances in which this doesn't work? Will this affect lisp-java usage when it comes to case?
Any pointers would be appreciated.
Thanks.
Blake McBride
Dear Blake,
Based on your input, I have been thinking more about making my
interface case sensitive. It would be better. After doing a little research I tried:
(setf (readtable-case *readtable*) :invert)
This seems to have made all the standard stuff ("car, cons, etc.") lowercase as I'd prefer. After that I tried creating lists:
(setq x '(HELLO There how))
and the case seems to be preserved - not inverted.
I also tried things like:
(defun fun (x) (+ 1 x)) (defun Fun (x) (+ 2 x)) (defun FUN (x) (+ 3 x))
And it worked as expected. I'm a bit confused. Why aren't symbols (as in '(HELLO There how)) inverted? (I understand that :invert doesn't change case on mixed case symbols but then all upper or all lower should be inverted.) Is *print-case* being affected?
*print-case* isn't being affected, but (readtable-case *readtable*) affects printer output: in order to make expressions readable on printing, the printer inverts the reader behaviour on *print-readably*.
To see what's really being returned, see the following transcript:
CL-USER(1): (defvar rt (copy-readtable nil)) RT CL-USER(2): (setf (readtable-case rt) :invert) :INVERT CL-USER(3): (let ((*readtable* rt)) (read-from-string "(a A aa aA AA)")) (A |a| AA |aA| |aa|)
This way, the reader settings applied when printing the READ-FROM-STRING result are the default reader settings, while the expression is being read using the :INVERT readtable-case.
At first test, it seems like :invert does exactly what most people want - case sensitive lisp that has system symbols all lower case. Are there instances in which this doesn't work? Will this affect lisp-java usage when it comes to case?
Any pointers would be appreciated.
See http://www.lispworks.com/documentation/HyperSpec/Body/22_accb.htm for the effects of READTABLE-CASE on the Lisp printer. You already knew about the effect of READTABLE-CASE on the lisp reader ( http://www.lispworks.com/documentation/HyperSpec/Body/23_ab.htm).
Hope that helps!
Regards,
Erik.
armedbear-devel@common-lisp.net