Prolog - Ayuda con ejercicio en Prolog

 
Vista:

Ayuda con ejercicio en Prolog

Publicado por Ronald (1 intervención) el 19/08/2010 23:52:56
Buenas tengo una duda con el siguiente codigo:( si lo copia,y lo compila estaría bien)

puede_comprar(A,B) :- /* A puede comprar B SI */
persona(A), /* A es persona Y */
coche(B), /* B es coche Y */
gusta(A,B), /* B le gusta a A Y */
se_vende(B). /* B se vende. */
persona(kelly).
persona(judy).
persona(ellen).
persona(mark).

coche(amarillo).
coche(arreglado).

gusta(kelly, arreglado).
gusta(judy, pizza).
gusta(ellen, tenis).
gusta(mark, tenis).

se_vende(pizza).
se_vende(amarillo).
se_vende(arreglado).

Y AL HACER LAS SIGUIENTES CONSULTAS ME DA LAS RESPUESTAS:

?- puede_comprar(kelly,Que).
Que = arreglado.

?- puede_comprar(Quien,arreglado).
Quien = kelly ;
false.

Mi pregunta es, viendo el código claramente se puede ver que la kelly es la única que puede comprar el coche arreglado.

¿Por qué al consultar " ?- puede_comprar(Quien,arreglado). " me da dos respuestas: Quien = kelly ; false. ?

PD: Notar que cuando consulto " ?- puede_comprar(kelly,Que). " solo meda la respuesta: Que = arreglado.
Y no me da tambien false como en la segunda consulta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con ejercicio en Prolog

Publicado por Fernando (9 intervenciones) el 12/12/2010 03:31:49
Yo creo que es porque intenta instanciar la siguiente persona, fijate que si colocas el predicado persona(kelly) como último de los 4 persona no te da el false final, directamente termina.. Lo mismo si invertís los predicados choche, te va a dar el false en el puede_comprar(kelly,Que).
Yo creo, no estoy seguro, que hay algun debugger que te muestra cómo interpreta Prolog el código y te muestra donde se instancia cada vez.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar