instalar descargar descarga buho prolog swi-prolog prolog-toplevel

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.