es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    from pyswip import Prolog
    
    prolog = Prolog()
    
    prolog.assertz("dad(peter)")
    
    res = list(prolog.query("dad(peter)"))
    
    if len(res) > 0:
        print(True)
    else:
        print(False)
    

    Este código imprimirá ‘True’ porque la regla “dad(peter)” es verdadera.

Comments are closed.