我正试图从一些lisp文件中获得一串代码,以创建unix文件名并在网页上显示:
(let ((code "(defun ² (x) (* x x))"))
(second (read-from-string code)))
计算结果为|2|
。事实上,只要输入'²
,计算结果就是|2|
,而不是|²|
。
从文件中读取code
字符串。我使用的是SBCL 2.2.10.
在此方案中,字符串"x²"
被解析为与字符串"x2"
相同:
(read-from-string "x²")
(read-from-string "x2")
如何使read-from-string
正确,而不修改字符串中的代码?
参见SBCL手册第7.1.2节。默认情况下,SBCL扩展阅读器以规范化所有符号。可以通过
防止当前可读表出现这种情况(setf (sb-ext:readtable-normalization *readtable*) nil)