Advertisement
JosepRivaille

LI - Flatten, Houses & Program

Jun 23rd, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.38 KB | None | 0 0
  1. % Exercice 1
  2.  
  3. flatten([], []).
  4. flatten([X|L], F) :- flatten(X, F1), flatten(L, F2), append(F1, F2, F), !.
  5. flatten(X, [X]).
  6.  
  7. flattenNoRepetitions([], []).
  8. flattenNoRepetitions([X|L], FNR) :-
  9.     flattenNoRepetitions(X, F1), flattenNoRepetitions(L, F2),
  10.     union(F1, F2, FNRU), sort(FNRU, FNR), !.
  11. flattenNoRepetitions(X, [X]).
  12.  
  13. union([], L, L).
  14. union([X|L1], L2, L3) :- member(X, L2), !, union(L1, L2, L3).
  15. union([X|L1], L2, [X|L3]) :- union(L1, L2, L3).
  16.  
  17. % Exercice 2
  18.  
  19. casas :-
  20.     Sol = [
  21.         [1,_,_,_,_,_],
  22.         [2,_,_,_,_,_],
  23.         [3,_,_,_,_,_],
  24.         [4,_,_,_,_,_],
  25.         [5,_,_,_,_,_]
  26.     ],
  27.     member([_,roja,_,_,_,peru], Sol), % El que vive en la casa roja es de Peru
  28.     member([_,_,_,perro,_,francia], Sol), % Al frances le gusta el perro
  29.     member([_,_,pintor,_,_,japon], Sol), % El pintor es japones
  30.     member([_,_,_,_,ron,china], Sol), % Al chino le gusta el ron
  31.     member([1,_,_,_,_,hungria], Sol), % El hungaro vive en la primera casa
  32.     member([_,verde,_,_,coñac,_], Sol), % Al de la casa verde le gusta el coñac
  33.     member([A,verde,_,_,_,_], Sol), member([B,white,_,_,_,_], Sol), 1 is B-A, % La casa verde esta a la izquierda de la blanca
  34.     member([_,_,escultor,caracol,_,_], Sol), % El escultor cría caracoles
  35.     member([_,amarillo,actor,_,_,_], Sol), % El de la casa amarilla es actor
  36.     member([3,_,_,_,cava,_], Sol), % El de la tercera casa bebe cava
  37.     member([C,_,actor,_,_,_], Sol), member([D,_,_,caballo,_,_], Sol), 1 is abs(C-D), % El que vive al lado del actor tiene un caballo
  38.     member([E,_,_,_,_,hungria], Sol), member([F,azul,_,_,_,_], Sol), 1 is abs(E-F), % El hungaro vive al lado de la casa azul
  39.     member([_,_,notario,_,whisky,_], Sol), % Al notario la gusta el whisky
  40.     member([G,_,medico,_,_,_], Sol), member([H,_,_,ardilla,_,_], Sol), 1 is abs(G-H), % El que vive al lado del medico tiene un ardilla
  41.     write(Sol), nl, !.
  42.  
  43. % Exercice 3
  44.  
  45. programa(P) :- append([begin|IS], [end], P), instructions(IS), !.
  46.  
  47. instructions(IS) :- instruction(IS), !.
  48. instructions(IS) :- append(I, [;], I1), !, append(I1, I2, IS), instruction(I), instructions(I2).
  49.  
  50. instruction([R,=,O1,+,O2]) :- variable(O1), variable(O2), variable(R).
  51. instruction(CI) :-
  52.     append([if|C], [endif], CI),
  53.     append(BE, [then|CB], C), boolean_expression(BE),
  54.     append(II, [else|IE], CB),
  55.     instruction(II), instruction(IE).
  56.  
  57. boolean_expression([O1,=,O2]) :- variable(O1), variable(O2).
  58.  
  59. variable(x).
  60. variable(y).
  61. variable(z).
  62.  
  63. % JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement