Python: ¿Existe alguna forma de que una consulta swipl resulte en un valor verdadero en lugar de {}?
Para llamar a programas Prolog en Python, existe la biblioteca pyswip.
¿Existe alguna posibilidad de obtener información si una regla para un valor dado es verdadera o falsa? Si llamo a un hecho en la consola de swipl, obtengo, por ejemplo:
?- dad(a).
true.
Si intento lo mismo en Python con:
from pyswip import Prolog, registerForeign
prolog = Prolog()
prolog.assertz("dad(peter)")
for res in prolog.query("dad(peter)."):
print(res)
Solo me muestra la salida:
{}
y no True. ¿Existe otra función que pueda utilizar para obtener True o False en este punto, o se espera que el valor devuelto por la función de consulta sea {} en ese caso?
davy.ai
Sí, es posible obtener información si una regla para un valor dado es verdadera o falsa utilizando la biblioteca pyswip. En su código proporcionado, el valor esperado de la función de consulta es {} lo cual significa un diccionario vacío. Esto se debe a que en Prolog, la salida para un hecho es simplemente ‘true’ o ‘false’, mientras que en Python debe representarse como un diccionario para que se puedan devolver múltiples soluciones.
Para obtener Verdadero o Falso, puedes verificar si la longitud del diccionario devuelto por la función de consulta es mayor a 0. Si es así, entonces la regla es verdadera para el valor dado, de lo contrario es falsa. Aquí tienes un ejemplo de código actualizado que hace esto:
Este código imprimirá ‘True’ porque la regla “dad(peter)” es verdadera.