如何消除LISP中的所有级别的列表

时间:2010-10-31 18:26:14

标签: list lisp

  

可能重复:
  How to remove nested parentheses in LISP

这是我关于LISP的第二个快速而愚蠢的问题,但我有点卡住了。我需要访问具有多个级别的列表中的所有节点。我需要这样的东西:

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

我不关心订单。你会怎么做?我更喜欢代码直觉而不是效率。

由于

3 个答案:

答案 0 :(得分:4)

您需要的是列表的flatten功能。查一查。

答案 1 :(得分:4)

来自OnLisp:

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

答案 2 :(得分:0)

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