I am trying to get a string of code from some lisp files, to create unix filenames and display it on web pages:
(let ((code "(defun ² (x) (* x x))"))
 (second (read-from-string code)))
Which evaluates to |2|. In fact, just typing '² evaluates to |2|, instead of |²|.
The code string is read from a file. I'm using SBCL 2.2.10.
With this scheme, the string "x²" is parsed the same as the string "x2" :
(read-from-string "x²")
(read-from-string "x2")
How can I make read-from-string correct, without modification on the code in the string ?
See sect. 7.1.2 of SBCL manual. By default, SBCL extends the reader to normalize all symbols. You can prevent this for current readtable by
(setf (sb-ext:readtable-normalization *readtable*) nil)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With