gpt4 book ai didi

common-lisp - 如何强制 Common Lisp 将数字视为符号名称?

转载 作者:行者123 更新时间:2023-12-01 09:58:15 25 4
gpt4 key购买 nike

我希望这些代码

(12 3.5 1e4)

可以看作三个符号

(|12| |3.5| |1e4|)

而不是三个数字。

我可以通过设置阅读器来实现吗?


更新:

我有一个组织为嵌套列表的数据集合:

(abc,d/e-f    12ab, 21e4, %rqa, (foo bar), ....)

不同的项目由逗号或空格(包括制表符和换行符) 分隔。我想在 w.r.t. 中阅读它们。嵌套结构,并且不改变任何字符。逗号可以设置为空格:

(set-syntax-from-char #\, #\Space)

最后问题还是在数字上。 21e4 由读者转为210000.0。我不想从头开始编写解析器,而是尽可能利用 common-lisp 的阅读器。

最佳答案

1 的示例,适用于 LispWorks:

CL-USER 1 > (setf rt0 *readtable*)
#<READTABLE 40F0038923>

CL-USER 2 > (setf rt1 (copy-readtable nil))
#<READTABLE 4020008C23>

CL-USER 3 > (defun read-digit-symbol (stream char)
(let ((*readtable* rt0))
(unread-char char stream)
(intern
(princ-to-string
(read stream t nil t)))))
READ-DIGIT-SYMBOL

CL-USER 4 > (set-macro-character #\1 #'read-digit-symbol t rt1)
T

CL-USER 5 > (defun test ()
(let ((*readtable* rt1))
(read-from-string "(1 11 111)")))
TEST

CL-USER 6 > (test)
(\1 |11| |111|)
10

CL-USER 7 >

关于common-lisp - 如何强制 Common Lisp 将数字视为符号名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21065114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com