Advertisement
Guest User

prolog

a guest
Jun 18th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. :- dynamic si/1, no/1.
  2.  
  3. adivinarPersonaje :- fail.
  4.  
  5. % agregarPersonaje(+Nombre, +Atributos).
  6. agregarPersonaje(_,_) :- fail.
  7.  
  8.  
  9.  
  10.  
  11.  
  12. % mostrarPersonaje(+Nombre).
  13. mostrarPersonaje(_) :- fail.
  14.  
  15. borraRespuestas :- fail.
  16.  
  17. % atributos(?Nombre, ?Atributos).
  18. atributos('Bulbasaur', [verde, planta, veneno, patas]).
  19. atributos('Paras', [naranja, planta, bicho, patas]).
  20. atributos('Zubat', [azul, volador, veneno, patas, alas]).
  21. atributos('Tentacool', [azul, agua, veneno, tentaculos]).
  22. atributos('Pikachu', [amarillo, electrico, patas]).
  23. atributos('Rattata', [violeta, normal, patas]).
  24. atributos('Pidgey', [marron, normal, volador, patas, alas]).
  25. atributos('Charmander', [naranja, fuego, patas]).
  26. atributos('Moltres', [rojo, fuego, patas, alas, volador]).
  27. atributos('Magikarp', [rojo, agua, aletas]).
  28.  
  29. % satisfaceAtributos(+Atributos).
  30. % Dar el predicado satisfaceAtributos(+AS) que tiene éxito si cada atributo de la
  31. %lista AS se satisface. En caso de no haber realizado la pregunta sobre un atributo de la lista, deberá
  32. %hacerla.
  33. satisfaceAtributos([X|T]) :- fail.
  34.  
  35. % satisface(+Atributo).
  36. % Implementar el predicado satisface(+A) que tiene éxito si se respondió “sı́” a la pregunta
  37. %sobre el atributo A, falle si se respondió “no” a la pregunta sobre el atributo A, o pregunte sobre el
  38. %atributo A en caso de no haber realizado la pregunta aún. Notar que un goal satisface(a) debe
  39. %unificar sólo con una de estas opciones.
  40. satisface(A) :- si(A), !.
  41. satisface(A) :- not(no(A)), pregunta(A), satisface(A) .
  42.  
  43. % pregunta(+Atributo).
  44. pregunta(A) :- mostrarPregunta(A), leerRespuesta(R), guardarRespuesta(A,R).
  45.  
  46. % mostrarPregunta(+Atributo).
  47. mostrarPregunta(A) :- write('tiene el personaje el atributo '), write(A), write('?\n').
  48.  
  49. % leerRespuesta(-Respuesta).
  50. leerRespuesta(R) :- read(R).
  51.  
  52. % guardarRespuesta(+Atributo, +Respuesta).
  53. guardarRespuesta(A, R) :- R == 'si', !, assertz(si(A)).
  54. guardarRespuesta(A, R) :- R == 'no', !, assertz(no(A)).
  55. guardarRespuesta(A, R) :- write('Respuesta inválida. Se pregunta nuevamente.\n'), pregunta(A).
  56.  
  57.  
  58. %%%%%%%%%%%%%%%% TESTS %%%%%%%%%%%%%%%%%%%%%%%%%
  59. test(1) :- true.
  60. tests :- forall(between(1,1,N), test(N)). % Hacer mejores tests y cambiar 1 por la cantidad de tests que tengan.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement