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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
dynamic([p1/1, p2/1, p3/1]).
% les prédicats de gestion de pile
init_piles([]).
init_piles([Pile | Q]) :-
P =.. [Pile, _X],
retractall(P),
P2 =.. [Pile, []],
asserta(P2),
init_piles(Q).
pile_vide(Pile) :-
P =.. [Pile, []],
call(P).
empile(Pile, Elem) :-
P =.. [Pile, X],
retract(P),
P1 =.. [Pile, [Elem | X]],
asserta(P1).
depile(Pile, Elem) :-
P =.. [Pile, X],
retract(P),
X = [Elem | T],
P1 =.. [Pile, T],
asserta(P1).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
empile_pile([], []).
empile_pile([Pile | X], [Input | Y]) :-
empile(Pile, Input),
empile_pile(X, Y).
test(Input) :-
% on calcule le nombre de sous listes
length(Input, N),
% on genere une liste du même nombre de piles
length(LP, N),
% on initialise les piles
init_piles([p1, p2, p3]),
% on les remplit avec les listes
empile_pile([p1, p2, p3], Input),
empile_pile([p1, p2, p3], [[x], [y], [z]]),
% on cree le tableau de sortie
%cree_tableau([], L),
% on l'ecrit à la console
afficher_liste_pile([p1, p2, p3]).
% si les trois piles sont vides
% Le tableau est termine
/*cree_tableau(LP, L, L) :-
forall(member(P, LP), pile_vide(P)),
!.
% on boucle sur la création du tableau
cree_tableau(LP, L, LL) :-
maplist(extrait, LP, L1),
cree_tableau(LP, [L1 | L], LL).*/
% on extrait un élément des piles
% Si la pile est vide, on insère 0
extrait(Pile, LL) :-
pile_vide(Pile) -> LL = 0;
depile(Pile, LL).
afficher_liste_pile([]).
afficher_liste_pile([T | Q]) :-
afficher_pile(T),
afficher_liste_pile(Q).
afficher_pile(Pile) :-
P =.. [Pile, X],
write(X). |
Partager