Advertisement
ostyleo

Untitled

Nov 15th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. % Se da sirul a1,..., an. Se cere sa se determine
  2. % toate subsirurile strict crescatoare ale sirului a.
  3.  
  4. % Predicatul de inversare a unei liste
  5. % inverseaza(L:lista, R:lista, Q:lista)
  6. % L - lista care se primeste
  7. % R - L inversat
  8. % Q - lista vida
  9. % model de flux (i,o,i)
  10. inverseaza([],R,R):-!.
  11. inverseaza([H|T],R,Q):- inverseaza(T,R,[H|Q]).
  12.  
  13. % Predicatul principal
  14. % ex1(L:lista, Q:lista, R:lista)
  15. % L - lista initiala
  16. % Q - lista colectoare
  17. % R - lista rezultat
  18. % model de flux (i,i,o)
  19. ex1([],Q,R):- inverseaza(Q,R,[]),!.
  20. ex1([L1|_],[Q1|Q],R):- L1 =< Q1, inverseaza([Q1|Q],R,[]),!.
  21. ex1([L1|L],[Q1|Q],R):- L1 > Q1, ex1(L,[L1,Q1|Q],R).
  22.  
  23. % Predicatul ce alege primul element din sublista
  24. % candidat(L:lista, E:int, R:lista)
  25. % L - lista initiala
  26. % E - elementul ce va fi primu din sublista
  27. % R - lista de dupa E
  28. % model de flux (i,o,o)
  29. candidat([H|T],H,T).
  30. candidat([_|T],E,R):- candidat(T,E,R).
  31.  
  32. % Predicatul ce alege al doilea element din sublista
  33. % c2(L:lista, E:int, R:lista)
  34. % L - lista initiala
  35. % E - elementul ce va fi primu din sublista
  36. % R - lista de dupa E
  37. % model de flux (i,o,o)
  38. c2([H|T],H,T):-!.
  39.  
  40. % Predicatul de apel
  41. % apel(L:lista,Q:lista)
  42. % L - lista de intrare
  43. % Q - lista rezultat
  44. % model de flux (i,o)
  45. apel(L,Q):- candidat(L,E1,L2),c2(L2,E2,L3),E1 < E2, ex1(L3,[E2,E1],Q).
  46.  
  47. % Predicatul de start
  48. % apel(L:lista,R:lista)
  49. % L - lista de intrare
  50. % R - lista de liste rezultat
  51. % model de flux (i,o)
  52. start(L,R):- findall(Q, apel(L,Q), R).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement