Лисп, пара вопросов о списках и рекурсии - PullRequest
1 голос
/ 10 февраля 2010

извините, что переполнена таким количеством вопросов.

У меня есть следующее:

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

Но так как рекурсивная функция возвращает список, я получаю список списка из списка ... тогда как мне нужен просто плоский список.

Как мне правильно реализовать рекурсию для функций, которые берут скаляр и возвращают список скаляров?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

Если я правильно понял, вы можете объединить уменьшить и добавить , чтобы сгладить список перед его возвратом.

Пример:

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

Выход:

(1 2 3)

В вашем случае это может сработать:

(reduce 'append (mapcar 'recursive-function L))
1 голос
/ 11 февраля 2010

Полагаю, вы ищете 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...