Es handelt sich um eine Implementierung von Prolog in Java. Der Interpreter ist Bestandtail von Intersult Artificial Intelligence.
Man kann sich Prolog wie eine Tiefensuche im Lösungsraum einer symbolischen Gleichung vorstellen. Zusätzlich gibt es einen Mechanismus, um das Backtracking zu brechen. Mit onceenter und onceleave kann ein logischer Zweig markiert werden, der nur einmal durchlaufen wird. Mit call(X) kann ein Parameter evaluiert werden.
name(param, ...) [:- ref(ref-param, ...), ...].
Symbol | Bedeutung |
---|---|
name | Legt den Namen eines Terms fest, der in einem anderen Term mit "ref" referenziert werden kann. |
param | Formalparameter der in der Definition des Terms als lokale Variable durch "ref-param" referenziert werden kann. Der Parameter wird während der Evaluierung innerhalb der Definition ersetzt und kann auch selbst wieder als "param" verwendet werden oder evaluiert werden. |
ref | Referenziert einen anderen Term. |
ref-param | Ein Aktualparameter zur Referenz eines Formalparameters "param", der durch eine Referenz des Terms mittels "ref" belegt wird. Bei jeder Evaluation des Terms kann "param" einen anderen Wert liefern. |
Prolog Ausdruck | Bedeutung |
---|---|
true. | Ein Ausdruck als reines Symbol ohne Parameter oder Regel führt immer zum Fortsetzen des Backtracking. |
equals(X, X). | Ein Ausdruck mit zwei identischen Parametern führt zu einem Ersetzen dieser Parameter. Falls dies Möglich ist, wird die Evaluierung fortgesetzt, andernfalls Backtracking durchgeführt. |
fail :- equals(x, y). | Backtracking kann dadurch herbeigeführt werden, indem equals mit zwei unterschiedlichen Parametern referenziert wird. |
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. |