Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Se da sirul a1,..., an. Se cere sa se determine
- % toate subsirurile strict crescatoare ale sirului a.
- % Predicatul de inversare a unei liste
- % inverseaza(L:lista, R:lista, Q:lista)
- % L - lista care se primeste
- % R - L inversat
- % Q - lista vida
- % model de flux (i,o,i)
- inverseaza([],R,R):-!.
- inverseaza([H|T],R,Q):- inverseaza(T,R,[H|Q]).
- % Predicatul principal
- % ex1(L:lista, Q:lista, R:lista)
- % L - lista initiala
- % Q - lista colectoare
- % R - lista rezultat
- % model de flux (i,i,o)
- ex1([],Q,R):- inverseaza(Q,R,[]),!.
- ex1([L1|_],[Q1|Q],R):- L1 =< Q1, inverseaza([Q1|Q],R,[]),!.
- ex1([L1|L],[Q1|Q],R):- L1 > Q1, ex1(L,[L1,Q1|Q],R).
- % Predicatul ce alege primul element din sublista
- % candidat(L:lista, E:int, R:lista)
- % L - lista initiala
- % E - elementul ce va fi primu din sublista
- % R - lista de dupa E
- % model de flux (i,o,o)
- candidat([H|T],H,T).
- candidat([_|T],E,R):- candidat(T,E,R).
- % Predicatul ce alege al doilea element din sublista
- % c2(L:lista, E:int, R:lista)
- % L - lista initiala
- % E - elementul ce va fi primu din sublista
- % R - lista de dupa E
- % model de flux (i,o,o)
- c2([H|T],H,T):-!.
- % Predicatul de apel
- % apel(L:lista,Q:lista)
- % L - lista de intrare
- % Q - lista rezultat
- % model de flux (i,o)
- apel(L,Q):- candidat(L,E1,L2),c2(L2,E2,L3),E1 < E2, ex1(L3,[E2,E1],Q).
- % Predicatul de start
- % apel(L:lista,R:lista)
- % L - lista de intrare
- % R - lista de liste rezultat
- % model de flux (i,o)
- start(L,R):- findall(Q, apel(L,Q), R).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement