我有一个字符串,它包含一个像((p X) (q (f X)))
这样的列表结构,我真的很想找到一个函数来解释/转换这个字符串列表,就好像它是'((p X) (q (f X)))
一样
(list "((p X) (q (f X)))")
只是使它成为单个元素列表。
(intern "((p X) (q (f X)))")
将其括在|中符号。
答案 0 :(得分:7)
答案 1 :(得分:2)
"((p X) (q (f X)))"
是Lisp中的一个字符串。字符串包含在"
。
LIST
创建一个列表,其参数为元素。
因此(list "((p X) (q (f X)))")
创建一个以字符串作为元素的列表。
INTERN
创建一个符号。
(intern "((p X) (q (f X)))")
创建一个带有字符串参数的符号作为其名称。在Common Lisp中,符号可以具有任意名称,甚至包括(
和)
等字符。这些符号印在|
中。示例:|((p X) (q (f X)))|
是一个具有如此奇怪名称的符号。
在Lisp中解析s表达式称为读取。执行此操作的功能例如是READ
和READ-FROM-STRING
。
有两种基本方法可以读取s-expression:
CL-USER 1 > (read-from-string "((p X) (q (f X)))")
((P X) (Q (F X)))
17
但您也可以使用WITH-INPUT-FROM-STRING
根据字符串打开输入流,然后使用通常的READ
:
CL-USER 2 > (with-input-from-string (stream "((p X) (q (f X)))")
(read stream))
((P X) (Q (F X)))