Open martinklein opened 2 years ago
Ich habe es gerade noch mal unter Linux mit SWI-Prolog 8.4.1 getestet und das erwartete Ergebnis bekommen:
female(rhea).
female(hestia).
female(hera).
female(demeter).
female(athena).
female(hebe).
female(persephone).
parent(cronus, hestia).
...
parent(demeter, persephone).
male(cronus).
male(pluto).
male(poseidon).
male(zeus).
male(ares).
male(hephaestus).
{}
Ich habe 2 Vermutungen woran es liegen könnte:
consult
funktioniert über eine temporäre Datei, die von Prolog wieder geladen wird. Windows-Systeme haben damit Erfahrungsgemäß oft Probleme. Versuchen Sie einmal die Fakten zunächst direkt in eine Datei zu schreiben und danach mit consult
zu laden:facts = """
parent(cronus,hestia).
parent(cronus,pluto).
parent(cronus,poseidon).
parent(cronus,zeus).
parent(cronus,hera).
parent(cronus,demeter).
parent(rhea, hestia).
parent(rhea, pluto).
parent(rhea, poseidon).
parent(rhea, zeus).
parent(rhea, hera).
parent(rhea, demeter).
parent(zeus, athena).
parent(zeus, ares).
parent(zeus, hebe).
parent(zeus, hephaestus).
parent(hera, ares).
parent(hera, hebe).
parent(hera, hephaestus).
parent(zeus, persephone).
parent(demeter, persephone).
male(cronus).
male(pluto).
male(poseidon).
male(zeus).
male(ares).
male(hephaestus).
female(rhea).
female(hestia).
female(hera).
female(demeter).
female(athena).
female(hebe).
female(persephone).
"""
with open("test_facts.pl", "w") as f:
f.write(facts)
prolog.consult("test_facts.pl")
listing
-Funktion in Prolog selbst sein.Ach ja sorry ich habe es unter Windows 11 mit SWI-Prolog 8.4.2 getestet. Die anderen Zellen darunter funktionieren alle. Auch mit ihrem workaround tritt dasselbe Problem auf.
for l in prolog.query("listing"): print(l) {}
Es muss also wirklich ein Problem mit der listing Funktion in Prolog sein.
Möglicherweise wird die listing
-Library unter Windows nicht standardmäßig importiert.
Hilft es vor der query
prolog.assertz("use_module(library(listing))")
auszuführen?
----> 2 prolog.assertz("use_module(library(listing))") 3 for l in prolog.query("listing"): 4 print(l)
NameError: name 'prolog' is not defined
Sorry - hatte die Zelle davor nicht gestartet. Aber jetzt - leider keine Änderung:
prolog.assertz("use_module(library(listing))") for l in prolog.query("listing"): print(l)
{}
Funktioniert listing` denn eigentlich direkt im Prolog-Interpreter?
Ja - funktioniert: 1 ?- fb:consult(planets). true.
2 ?- fb:listing.
orbits(earth, sun). orbits(saturn, sun). orbits(titan, saturn).
satellite(X) :- orbits(X, _).
planet(X) :- orbits(X, sun).
moon(X) :- orbits(X, Y), planet(Y). true.
Im Beispiel example.ipynb in der zweiten Zelle gibt es das Statement
for l in prolog.query("listing"): print(l)
Bei mir ist das Resultat aber nicht die Liste aller Facts Sondern nur
{}
Bitte um Ihre Hilfe Martin Klein