【问题标题】:Lisp, a couple of questions about lists and recursionLisp,关于列表和递归的几个问题
【发布时间】:2011-01-15 10:16:27
【问题描述】:

很抱歉问了这么多问题。

我有以下:

(defun recursive-function (string) "returns list of strings"
;I am trying to return flat list
; create list L
(append (mapcar 'recursive-function L)))

但是由于递归函数返回一个列表,我最终得到一个列表列表的列表......,而我只想要一个平面列表。

对我来说,在采用标量并返回标量列表的函数上实现递归的正确方法是什么?

谢谢。

【问题讨论】:

    标签: list function recursion lisp


    【解决方案1】:

    如果我理解正确,您可以结合 reduceappend 在返回之前将列表展平。

    例子:

    (reduce 'append '((1) (2) (3)))
    

    输出:

    (1 2 3)
    

    在你的情况下这可能有效:

    (reduce 'append (mapcar 'recursive-function L))
    

    【讨论】:

      【解决方案2】:

      我相信你正在寻找mapcan

      [...] mapcan 和 mapcon 就像 mapcar 和 maplist 分别,除了 应用函数的结果是 通过使用组合成一个列表 nconc 而不是列表。 [...]

      (defun recursive-function (string) "returns list of strings"
         ;I am trying to return flat list
         ; create list L
         (mapcan 'recursive-function L))
      

      【讨论】:

        猜你喜欢
        • 2020-03-21
        • 1970-01-01
        • 2013-05-03
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 2011-01-19
        • 2015-05-10
        • 2015-06-08
        相关资源
        最近更新 更多