next up previous contents
Nächste Seite: Andere Informationsquellen Aufwärts: Umgang mit SICStus-PROLOG Vorherige Seite: Interpretierung: Anfragen   Inhalt

Trace und Debug

Die Details des PROLOG Beweisverfahrens kann der Benutzer sich anzeigen lassen mit Hilfe des Prädikates trace/0. Dieses Prädikat ist immer beweisbar, und kann als eine Anweisung, die Beweisinnereien anzuzeigen, verstanden werden. Falls eine Anfrage unbeweisbar bleibt, für die einen Beweis eigentlich existieren müsste, oder falls eine Anfrage beweisbar ist, die das nicht sein sollte, kann die Ausgabe vom trace Modus behilflich sein.

Die Ausgabe in trace Modus18 Zeigt eine Zeile für jeden Schritt des Beweisverfahrens an. Argumente, die mit einem Unterstrich (``_'') anfangen, und sonst nur aus Zahlen bestehen, stellen uninstantiierte Variablen da. In xemacs wird in trace Modus die für das Beweisverfahrenschritt aktuelle Zeile in der Quelldateipuffer farblich hevorgehoben. Der nächste Schritt wird angezeigt, wenn beim PROLOG trace Prompt (``?''), Enter getippt wird. Weitere Details zur trace sind in der SICStus-PROLOG Dokumentation zu finden (§4.3.5).

trace Modus lässt sich vom PROLOG Prompt wieder ausschalten mit einer Anfrage an das Prädikat notrace/0.

Beispiel Quelldatei 'cows.pl':
moo(X) :- cow(X).
cow(kuh).
cow(rind).
cow(yak).

Beispiel Interpreter-Ablauf:
| ?- [cows]. % Konsultieren von 'cows.pl'
{consulting /home/moo/prolog/cows.pl...}
{consulted /home/moo/prolog/cows.pl in module user}

yes
| ?- trace.
{The debugger will first creep -- showing everything}

yes
| ?- moo(X).
1 1 Call: moo(_196) ?
2 2 Call: cow(_196) ?
? 2 2 Exit: cow(kuh) ?
? 1 1 Exit: moo(kuh) ?

X = kuh ? ;
1 1 Redo: moo(kuh) ?
2 2 Redo: cow(kuh) ?
? 2 2 Exit: cow(rind) ?
? 1 1 Exit: moo(rind) ?

X = rind ? ;
1 1 Redo: moo(rind) ?
2 2 Redo: cow(rind) ?
2 2 Exit: cow(yak) ?
1 1 Exit: moo(yak) ?

X = yak ? ;

no


next up previous contents
Nächste Seite: Andere Informationsquellen Aufwärts: Umgang mit SICStus-PROLOG Vorherige Seite: Interpretierung: Anfragen   Inhalt
Bryan Jurish
Fri Dec 1 23:18:06 CET 2000