Advertisement
JosepRivaille

LI - Basic Prolog

Jun 23rd, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.28 KB | None | 0 0
  1. % Exercice 2
  2. prod([], 1).
  3. prod([X|L], P) :- prod(L, P2), P is P2 * X.
  4.  
  5. % Exercice 3
  6. pescalar([], [], 0).
  7. pescalar([X|L1], [Y|L2], P) :- pescalar(L1, L2, P2), P is P2 + X * Y.
  8.  
  9. % Exercice 4
  10. intersection([], _, []).
  11. intersection([X|L1], L2, [X|L3]) :- pert(X, L2), !, intersection(L1, L2, L3).
  12. intersection([_|L1], L2, L3) :- intersection(L1, L2, L3).
  13.  
  14. union([], L, L).
  15. union([X|L1], L2, L3) :- pert(X, L2), !, union(L1, L2, L3).
  16. union([X|L1], L2, [X|L3]) :- union(L1, L2, L3).
  17.  
  18. % Exercice 5
  19. last(L, X) :- append(_, [X], L).
  20.  
  21. reverse([], []).
  22. reverse(L, [X|R]) :- append(L1, [X], L), reverse(L1, R).
  23.  
  24. % Exercice 6
  25. fib(1, 1).
  26. fib(2, 1).
  27. fib(N, F) :- N > 2, N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2.
  28.  
  29. % Exercice 7
  30. dados(0, 0, []).
  31. dados(P, N, [X|L]) :- N > 0, pert(X, [1,2,3,4,5,6]), P1 is P - X, N1 is N - 1, dados(P1, N1, L).
  32.  
  33. % Exercice 8
  34. suma_demas(L) :- pert_con_resto(X, L, R), suma(R, X), !.
  35.  
  36. % Exercice 9
  37. suma_ants(L) :- append(L1, [X|_], L), suma(L1, X), !.
  38.  
  39. % Exercice 11
  40. esta_ordenada([]).
  41. esta_ordenada([_]) :- !.
  42. esta_ordenada([X,Y|L]) :- X >= Y, esta_ordenada([Y|L]).
  43.  
  44. % Exercice 12
  45. ordenacion(L, O) :- permutation(L, O), esta_ordenada(O), !.
  46.  
  47. % Exercice 14
  48. insertion_sort([], []).
  49. insertion_sort([X|L], O) :- insertion_sort(L, L1), insertion(X, L1, O).
  50.  
  51. insertion(X, [], [X]).
  52. insertion(X, [Y|L], [X,Y|L]) :- X =< Y.
  53. insertion(X, [Y|L], [Y|L1]) :- X > Y, insertion(X, L, L1).
  54.  
  55. % Exercice 16
  56. merge_sort([], []) :- !.
  57. merge_sort([X], [X]) :- !.
  58. merge_sort(L, O) :- split(L, L1, L2), merge_sort(L1, L11), merge_sort(L2, L22), merge(L11, L22, O).
  59.  
  60. split([], [], []).
  61. split([X], [X], []).
  62. split([X,Y|L], [X|L1], [Y|L2]) :- split(L, L1, L2).
  63.  
  64. merge(L, [], L) :- !.
  65. merge([], L, L).
  66. merge([X|L1], [Y|L2], [X|L]) :- X =< Y, !, merge(L1, [Y|L2], L).
  67. merge([X|L1], [Y|L2], [Y|L]) :- merge([X|L1], L2, L).
  68.  
  69. % Exercice 18
  70. palindrome(L) :- permutation(L, P), is_palindrome(P), write(P), nl, fail.
  71. palindrome(_).
  72.  
  73. is_palindrome([]).
  74. is_palindrome([_]) :- !.
  75. is_palindrome([X|P]) :- append(L, X, P), is_palindrome(L).
  76.  
  77. %%%%% UTILS %%%%
  78. pert(X, [X|_]).
  79. pert(X, [_|L]):- pert(X,L).
  80.  
  81. pert_con_resto(X, L, R) :- append(L1, [X|L2], L), append(L1, L2, R).
  82.  
  83. suma([], 0).
  84. suma([X|L], S) :- suma(L, S1), S is S1+X.
  85.  
  86. % JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement