Lisp,关于列表和递归的几个问题

时间:2010-02-10 19:20:04

标签: list function recursion lisp

很抱歉这么多问题。

我有以下内容:

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

但是由于recursive-function返回一个列表,我最终会得到一个列表列表...,而我只想要一个平面列表。

对于使用标量并返回标量列表的函数实现递归的正确方法是什么?

感谢。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您可以将 reduce 追加组合在一起,以便在返回之前展平列表。

示例:

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

输出:

(1 2 3)

在您的情况下,这可能有效:

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

答案 1 :(得分:1)

我相信你正在寻找mapcan

  

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

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