1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| % L : Liste de départ
% LF : liste resultat finale
% toutes_les_sous_listes(L, LF) :-
%
% ici on traite le cas de la liste vide
toutes_les_sous_listes([], []).
toutes_les_sous_listes([H | T], LF) :-
% on extrait d'abord toutes les sous_listes
% de la liste privées du premier élément
toutes_les_sous_listes(T, L1),
% On ajoute le premier élélement à toutes
% les sous-listes qui viennent d'être trouvées
% le côté "fonctionnel"
maplist(ajoute_element_en_tete(H), L1, L2),
% Et on construit la liste définitive avec
% a : les premiers sous_listes trouvées à la premiere ligne
% b : les sous_listes construites à la deuxièmle ligne
% c : sans oublier d'ajouter la sous-liste formée par l'élément lui-meme
append([[H] | L2], L1, LF).
% le prédicat "fonctionnel"
ajoute_element_en_tete(X, L, [X|L]).
test(ListeInitiale) :-
toutes_les_sous_listes(ListeInitiale, SousListes),
% on affiche le résultat,
maplist(writeln, SousListes). |
Partager