2011-11-16 60 views
1

我有一個字符串,其中包含一個像((p X) (q (f X)))這樣的列表結構,我真的很想找到一個函數,將該字符串解釋/轉換爲列表列表,就像它是一個'((p X) (q (f X)))如何將字符串解析爲列表結構?

(list "((p X) (q (f X)))")只是使其成爲單個元素列表。

(intern "((p X) (q (f X)))")將其封入|符號。

回答

7

如何

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

爲你工作?找到文檔here

+0

他媽的!這正是我需要的。我太早放棄谷歌了。兄弟,非常感謝! – user1048677

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)))|是一個具有如此奇怪名稱的符號。

解析s表達式在Lisp中被稱爲,讀取。例如READREAD-FROM-STRING

有讀取S-表達的兩種基本方式:

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)))