2010-10-31 49 views
2

可能重複:
How to remove nested parentheses in LISP如何消除列出的各級LISP

這是關於LISP我的第二個快速和愚蠢的問題,但我也有點卡住。我需要訪問列表中幾個級別的所有節點。我需要這樣的:

>> (get-symbols '(A (B (C D) E))) 
(A B C D E) 

我不關心訂單。你會怎麼做?我更喜歡代碼直觀性而不是效率。

感謝

+2

退房http://stackoverflow.com/questions/2680864/how-to-remove-nested-parentheses-in-lisp – 2010-10-31 18:29:07

+0

「嵌套的括號」。我沒有想到要這樣做,所以我沒有找到那個。如果它適合我​​,我希望如此,我應該刪除這個問題嗎? – jesusiniesta 2010-11-01 02:30:55

+2

「拼合嵌套列表」是正確的描述。你的問題是重複的。如果你想刪除它。 – 2010-11-01 05:50:15

回答

4

從OnLisp:

(defun flatten (tree) 
    (if (atom tree) 
     (mklist tree) 
    (nconc (flatten (car tree)) 
     (if (cdr tree) (flatten (cdr tree)))))) 
4

你需要的是列出了flatten功能。看看它。

+0

我在Common Lisp中找不到那個函數(我忘了說明我必須使用哪個Lisp版本) – jesusiniesta 2010-11-01 02:31:40

0
(defun get-symbols (lst) 
     (when lst 
      (if (atom lst) (list lst) 
       (append (get-symbols (car lst)) 
         (get-symbols (cdr lst))))))