prolog - descargar - ¿Por qué esta consulta de prólogo es verdadera y falsa?
prolog buho (2)
(Nota: esta respuesta es algo de una conjetura)
Considere cómo Prolog determina si f(a,c)
es verdadero o no. Verifica la primera regla, f(a,b)
, y no encuentra una coincidencia, pero la segunda regla, f(a,c)
coincide. Por lo tanto, f(a,c)
es verdadero. Además, dado que no hay más reglas para f
, no tiene sentido permitir que ocurra un retroceso, no hay otras soluciones posibles.
Ahora considere f(a,b)
. Prolog comprobará la primera regla y buscará una coincidencia. Por lo tanto, f(a,b)
es verdadero. Sin embargo, no todas las reglas se han agotado. Por lo tanto, Prolog permitirá que la búsqueda continúe (si golpeas ;
). Cuando continúe la búsqueda y retroceda, descubrirá que las reglas restantes, específicamente f(a,c)
, no coinciden con f(a,b)
. Por lo tanto, el resultado es falso.
Mi base de conocimientos de SWI-Prolog contiene los siguientes dos hechos:
f(a,b).
f(a,c).
Ahora si pongo la consulta
?- f(a,c).
true.
Pero
?- f(a,b).
true ;
false.
¿Por qué es f (a, b) verdadero y falso? Esto también sucede cuando hay tres hechos en la KB. Si adjunto f (a, d). para la KB, entonces f (a, d) es verdadero (solo), pero f (a, b) yf (a, c) son verdaderos y falsos. ¿Qué está pasando y qué puedo hacer para que Prolog responda (solo) a estas consultas?
Solo en adición a la respuesta de Michael Williamson. Si quiere decirle a Prolog que deje de buscar respuestas después del primer golpe exitoso, use el corte ( !
):
?- f(a, b), !.
true.
?- f(a, c), !.
true.