【问题标题】:How to eliminate all levels of lists in LISP [duplicate]如何消除LISP中的所有级别列表[重复]
【发布时间】:2011-05-03 03:25:23
【问题描述】:

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

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

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

我不在乎订单。你会怎么做?我更喜欢代码的直观性而不是效率。

谢谢

【问题讨论】:

  • “嵌套括号”。没想到这么放,所以没找到。如果它对我有用,我希望如此,我应该删除这个问题吗?
  • “扁平化嵌套列表”是正确的描述。你的问题是重复的。如果你想删除它。

标签: list lisp


【解决方案1】:

来自 OnLisp:

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

【讨论】:

    【解决方案2】:
     (defun get-symbols (lst)
            (when lst
               (if (atom lst) (list lst)
                   (append (get-symbols (car lst))
                           (get-symbols (cdr lst))))))
    

    【讨论】:

      【解决方案3】:

      您需要的是列表的flatten 函数。查一下。

      【讨论】:

      • 我在 Common Lisp 中找不到那个函数(我忘了指明我必须使用哪个 Lisp 版本)
      猜你喜欢
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多