This page (revision-4) was last changed on 20-Nov-2014 10:38 by Dieter Käppel

This page was created on 20-Nov-2014 10:14 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
4 20-Nov-2014 10:38 6 KB Dieter Käppel to previous
3 20-Nov-2014 10:38 6 KB Dieter Käppel to previous | to last
2 20-Nov-2014 10:32 4 KB Dieter Käppel to previous | to last
1 20-Nov-2014 10:14 2 KB Dieter Käppel to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 1 changed one line
Es handelt sich um eine Implementierung von [Prolog|http://de.wikipedia.org/wiki/Prolog_%28Programmiersprache%29] in [Java]. Der Interpreter ist Bestandtail von [Intersult Artificial Intelligence].
Es handelt sich um eine Implementierung eines Unifikationskalüls in der Sprache von [Prolog|http://de.wikipedia.org/wiki/Prolog_%28Programmiersprache%29] mittels [Java]. Der Interpreter ist Bestandtail von [Intersult Artificial Intelligence].
At line 8 added 7 lines
Das eigentliche Ausführen eines Terms besteht in der sogenannten Unifikation. Die Art der Programmverarbeitung wird daher auch als Unifikationskalül bezeichnet. Terme werden immer genau dann weiter evaluiert, wenn die Parameter mit dem aufgerufenen Muster übereinstimmen. Man sagt auch, zwei Variablen werden unifziert. Als Ergebnis stimmen die Variablen entweder überein, dann werden die folgenden Elemente ebenfalls evaluiert. Oder die Variablen sind unterschiedlich, dann wird Backtracking ausgeführt, also zu den übergeordneten, aufrufenden Termen zurück gegangen.
In Prolog entstehen Ausführungszweige auf zwei Arten:
* __Gleichnamige Terme:__ Es können mehrere Terme mit demselben Namen vorhanden sein. Diese werden dann in der festgelegten Reihenfolge evaluiert.
* __Parameter:__ Wenn Parameter durch mehrere Terme ersetzt werden können, werden diese der Reihe nach durchprobiert.
At line 28 changed 12 lines
|if(X, Y, Z) :- once(test(X, R)), case(R, Y, Z).|
|test(X, true) :- call(X).|
|test(X, fail).|
|case(true, X, Y) :- call(X).|
|case(fail, X, Y) :- call(Y).|
|not(X) :- if(X, fail, true).|
|or(X, Y) :- call(X).|
|or(X, Y) :- call(Y).|
|and(X, Y) :- call(X), call(Y).|
|once(X) :- onceenter, call(X), onceleave.|
|repeat.|
|repeat :- repeat.|
|if(X, Y, Z) :- once(test(X, R)), case(R, Y, Z).|Der Term "test" wird einmal ausgeführt, anschließend der Term "case" mit der entstandenen Entscheidung.
|test(X, true) :- call(X).|Der als Parameter X übergebene Term wird ausgeführt, wenn der zweite Parameter mit true unifiziert wird.
|test(X, fail).|Der zweite Zweig des Terms "test" führt den Parameter X nicht aus, wenn der zweite Parameter mit fail unifiziert wird.
|case(true, X, Y) :- call(X).|Der erste Zweig vom Term "case" führt X aus, wenn der erste Parameter auf true unifiziert.
|case(fail, X, Y) :- call(Y).|Der zweite Zweig vom Term "case" führt Y aus, wenn der erste Parameter auf fail unifiziert.
|not(X) :- if(X, fail, true).|Der Term "not" kehrt den Wahrheitswert vom Parameter X um, indem er den Term "if" aufruft und den Wahrheitswert umgekehrt zurückgibt.
|or(X, Y) :- call(X).|Der erste Zweig des Terms "or", der den Parameter X ausführt.
|or(X, Y) :- call(Y).|Der zweite Zweig des Terms "or", der den Parameter Y ausführt. Der zweite Zweig wird also auch bei fail von Parameter X durch Backtracking ausgeführt.
|and(X, Y) :- call(X), call(Y).|Der Term "and" führt direkt Parameter X und dann Parameter Y aus. Führt X zu fail, wird Y nicht ausgeführt.
|once(X) :- onceenter, call(X), onceleave.|Der Term "once" ist eine Abkürzung für onceenter und onceleave, indem der den Parameter X genau einmal ausführt.
|repeat.|Der erste Zweig vom Term "repeat" wird immer ausgeführt.
|repeat :- repeat.|Der zweite Zweig des Terms "repeat" ruft sich einfach wieder selbst auf. Das ist die einfachste Art der Rekursion in Prolog. Beim Aufrufen von "repeat" muss natürlich dafür gesorgt werden, dass die Wiederholung irgendwo abgebrochen wird.