【问题标题】: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】:
如果我理解正确,您可以结合 reduce 和 append 在返回之前将列表展平。
例子:
(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))