这是我关于LISP的第二个快速而愚蠢的问题,但我有点卡住了。我需要访问具有多个级别的列表中的所有节点。我需要这样的东西:
>> (get-symbols '(A (B (C D) E )))
(A B C D E)
我不关心订单。你会怎么做?我更喜欢代码直觉而不是效率。
由于
答案 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))))))