2012-04-14 10 views
0

Ich versuche, alle Fakten zu drucken, um eine Abfrage Lösung zu erhalten, und ich hoffe, nichts zu drucken, wenn die Vereinigung fehlgeschlagen ist. Also schreibe ich diese:Wie erhalten Sie alle Fakten, um eine Abfrage Lösung in Prolog zu bekommen?

a:- 
    b,c,writeln(b^c->a). 
b:- 
    d,writeln(d->b). 
c:- 
    fail,writeln(e->c). 
d:- 
    writeln(d). 
a:- 
    b,d,writeln(b^d->a). 

Allerdings, wenn ich a. abfragen, ich habe die folgende Ausgabe leider:

d 
d->b 
d 
d->b 
d 
b^d->a 
true. 

Jemand scheint mir zu sagen, dass Prolog verfügt über einen eingebauten in machanism alle zeigen die Fakten verwendet, um eine Abfrage durchzuführen. Ist er wahr? Wie kann ich die richtige Ausgabe erhalten?

Antwort

1

Ihr Programm hat keine Variablen und somit auch keine Vereinheitlichung.

bearbeitet: Oder besser, in abstrakten Sinne, Prolog zwischen einer Liste von Horn-Klauseln wählen Sie das aktuelle Ziel mit jeder Regel Kopf zu vereinen. Aber tatsächliche Prologs ersetzen die Auswahlphase durch Indizierung, für Leistung und Versuch, Argumente zu vereinheitlichen.

Wenn Sie a aufrufen, das ruft bundc, undDruck Ausdruck.

Der eingebaute Mechanismus, der alle in einer Abfrage verwendeten Regeln zeigt, ist wahrscheinlich trace. Einzelheiten finden Sie in Ihrem Prolog-Handbuch. Es handelt sich um ein ziemlich komplexes Argument, das die inneren Abläufe des Systems und die "Architektur" der Sprache, auf die Sie abzielen, betrifft.

Es gibt natürlich keine rechts Ausgabe, abgesehen davon, was Sie sehen können. Das ist die Semantik, die du geschrieben hast.