2010-02-10 8 views
1

désolé de déborder avec autant de questions.Lisp, quelques questions sur les listes et la récursivité

Je donne les résultats suivants:

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

Mais depuis fonction récursive renvoie une liste, je me retrouve avec une liste d'une liste d'une liste ..., alors que je veux juste une liste plate.

Quelle est la bonne façon pour moi d'implémenter la récursivité sur des fonctions qui prennent un scalaire et retournent une liste de scalaires?

Merci.

Répondre

2

Si je comprends bien, vous pouvez combiner réduire et append pour aplatir la liste avant de le retourner.

Exemple:

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

Sortie:

(1 2 3) 

Dans votre cas, cela pourrait fonctionner:

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

Je crois que vous cherchez mapcan:

[...] mapcan et mapcon sont comme mapcar et maplist respectivement, sauf que les résultats de la fonction d'application sont combinés dans une liste par l'utilisation de nconc plutôt que par liste. [...]

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