如何将字符串解析为列表结构?

时间:2011-11-16 00:14:22

标签: lisp common-lisp

我有一个字符串,它包含一个像((p X) (q (f X)))这样的列表结构,我真的很想找到一个函数来解释/转换这个字符串列表,就好像它是'((p X) (q (f X)))一样

(list "((p X) (q (f X)))")只是使它成为单个元素列表。

(intern "((p X) (q (f X)))")将其括在|中符号。

2 个答案:

答案 0 :(得分:7)

如何

(read-from-string  "((p X) (q (f X)))")

为你工作?找到文档here

答案 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表达式称为读取。执行此操作的功能例如是READREAD-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)))