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 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].
Es handelt sich um eine Maschine zur logischen Inferenz mittels Unifikationskalül, die durch die Sprache [Prolog|http://de.wikipedia.org/wiki/Prolog_%28Programmiersprache%29] betrieben wird. Der Interpreter ist in [Java] implementiert und Bestandtail von [Intersult Artificial Intelligence].
At line 47 added 38 lines
!!!Java Interface
Zunächst kann man einen Prolog-Interpreter durch die Klasse com.intersult.ai.prolog.Prolog instantiieren:
{{{
Prolog prolog = new Prolog();
}}}
Diesen kann man durch die Methode "consult" neue Terme hinzufügen:
{{{
prolog.consult("append([], L, L).");
prolog.consult("append([H | T], L, [H | R]) :- append(T, L, R).");
}}}
Hier wird der Term "append" implementiert mit den drei Parametern T, L und R, sodass T = L | R gilt. T ist also das Aneinanderfügen der Listen L und R.
Schließlich kann man einen Term ausführen und das Ergebnis anzeigen, indem wir die Frage stellen, welchen Term X erhält man, wenn man [1, 2] und [3, 4] zusammensetzt:
{{{
System.out.println(prolog.run("append([1, 2], [3, 4], X)"));
}}}
__Ergebnis:__ Erwartungsgemäß fügt der Prozessor die beiden Listen [1, 2] und [3, 4] zusammen zu [1, 2, 3, 4].
Dies war nun keine logische Leistung, sondern ein imperativer Ablauf, wie es gewöhnliche Java-Programme auch machen. Doch nun machen wir es umgekehrt und fragen, welchen Term X muss man [4, 5, 6] voranstellen, um [1, 2, 3, 4, 5, 6] zu erhalten.
{{{
Term result = prolog.run("append(X, [4, 5, 6], [1, 2, 3, 4, 5, 6])");
System.out.println(result.get(0));
}}}
__Ergebnis:__ Die Evaluierung von "append" führt zu einer logischen Leistung, indem die Inferenz die einzige Lösung [1, 2, 3] für X findet, sodass das es zusammengesetzt mit [4, 5, 6] zum Ergebnis [1, 2, 3, 4, 5, 6] führt.
!!!Fazit
Man erkennt, dass jeder Parameter sowohl als Eingabe als auch Ausgabe verwendet werden kann. Und zwar ohne dass jede Variante von Ein- und Ausgabe eigens implementiert werden müsste. Logische Aussagen werden analytisch definiert, sodass der Prozessor eine Inferenz vornehmen kann.
Damit unterscheidet sich Prolog deutlich von den sogenannten imperativen Maschinen, die immer nur einen Befehl (daher imperativ) entgegennehmen und dann einen logischen Zug ausführen.