Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :- dynamic si/1, no/1.
- adivinarPersonaje :- fail.
- % agregarPersonaje(+Nombre, +Atributos).
- agregarPersonaje(_,_) :- fail.
- % mostrarPersonaje(+Nombre).
- mostrarPersonaje(_) :- fail.
- borraRespuestas :- fail.
- % atributos(?Nombre, ?Atributos).
- atributos('Bulbasaur', [verde, planta, veneno, patas]).
- atributos('Paras', [naranja, planta, bicho, patas]).
- atributos('Zubat', [azul, volador, veneno, patas, alas]).
- atributos('Tentacool', [azul, agua, veneno, tentaculos]).
- atributos('Pikachu', [amarillo, electrico, patas]).
- atributos('Rattata', [violeta, normal, patas]).
- atributos('Pidgey', [marron, normal, volador, patas, alas]).
- atributos('Charmander', [naranja, fuego, patas]).
- atributos('Moltres', [rojo, fuego, patas, alas, volador]).
- atributos('Magikarp', [rojo, agua, aletas]).
- % satisfaceAtributos(+Atributos).
- % Dar el predicado satisfaceAtributos(+AS) que tiene éxito si cada atributo de la
- %lista AS se satisface. En caso de no haber realizado la pregunta sobre un atributo de la lista, deberá
- %hacerla.
- satisfaceAtributos([X|T]) :- fail.
- % satisface(+Atributo).
- % Implementar el predicado satisface(+A) que tiene éxito si se respondió “sı́” a la pregunta
- %sobre el atributo A, falle si se respondió “no” a la pregunta sobre el atributo A, o pregunte sobre el
- %atributo A en caso de no haber realizado la pregunta aún. Notar que un goal satisface(a) debe
- %unificar sólo con una de estas opciones.
- satisface(A) :- si(A), !.
- satisface(A) :- not(no(A)), pregunta(A), satisface(A) .
- % pregunta(+Atributo).
- pregunta(A) :- mostrarPregunta(A), leerRespuesta(R), guardarRespuesta(A,R).
- % mostrarPregunta(+Atributo).
- mostrarPregunta(A) :- write('tiene el personaje el atributo '), write(A), write('?\n').
- % leerRespuesta(-Respuesta).
- leerRespuesta(R) :- read(R).
- % guardarRespuesta(+Atributo, +Respuesta).
- guardarRespuesta(A, R) :- R == 'si', !, assertz(si(A)).
- guardarRespuesta(A, R) :- R == 'no', !, assertz(no(A)).
- guardarRespuesta(A, R) :- write('Respuesta inválida. Se pregunta nuevamente.\n'), pregunta(A).
- %%%%%%%%%%%%%%%% TESTS %%%%%%%%%%%%%%%%%%%%%%%%%
- test(1) :- true.
- 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