Eingebettete Prolog-Interpreter/Compiler für Java
Arbeite ich an einer Anwendung in Java, die Bedürfnisse zu tun, die eine komplexe Logik Regel Abzüge als Teil seiner Funktionalität. Ich möchte code meiner Logik Abzüge in Prolog oder eine andere Logik/constraint programming language, anstelle von Java, wie ich glaube, dass der entstehende code wird deutlich einfacher und wartbarer.
Googelte ich für eingebettete Java-Implementierungen auf den Prolog, und gefunden viele von Ihnen, jeder mit sehr wenig Dokumentation. Meine (bescheidene) Auswahl-Kriterien sind:
- sollte bündig in Java (z.B. gebündelt mit meinem java-Paket statt der Anforderung, dass jede native Installationen auf externe Programme)
- einfache Schnittstelle zu verwenden, die von Java (für die Initiierung der Abzüge, Prüfung der Ergebnisse und das hinzufügen von Regeln)
- kommen mit mindestens ein paar Beispiele, wie man es
- nicht unbedingt Prolog, sondern einer anderen Logik/constraint-Programmierung Sprachen mit den oben genannten Kriterien wären für meine Bedürfnisse auch.
Welche Möglichkeiten habe ich und was sind Ihre Vorteile und Nachteile?
- Ich habe noch nie verwendet ein Prolog-in-Java, aber eine andere Möglichkeit ist, ein eigenes zu schreiben. Ich weiß von mindestens 2 Lisp-Bücher, die dies in nicht allzu vielen Seiten (Auf Lisp und PAIP), also kann es nicht so schwer sein, auch in Java.
- Sicher, Sie können machen, eine Spielzeug-Logik-Programmiersprache in ein paar Seiten code, aber ich bin auf der Suche nach etwas ein bisschen mehr robust. Nun, Sie können tun ein Spielzeug lisp in ein paar Seiten code, also denke ich, werde ich brauchen nur vier Seiten und ich werde gut zu gehen 🙂
- Das sind einige geladene Wörter, die man wirft um! Ich bin mir nicht sicher, was macht eine kleine Prolog-Implementierung ein "Spielzeug", oder, in welcher Weise Sie sind nicht "robust" genug. Eine Norvig der Unterricht war "der Prolog ist ähnlich zu Lisp auf die wichtigsten Punkte"; eine kleine Prolog-auf-Lisp, ist das nicht ein "Spielzeug", sondern eine andere Benutzeroberfläche für den compiler. Es wird nicht so viel Spaß in Java, aber ich glaube nicht, dass er dabei war, die viel mit Makros.
- 1. Keine Bibliotheken. 2. Keine syntax. Während mit Lisp, können Sie die Wiederverwendung der Lisp-syntax und Lisp-Bibliotheken ("der Prolog ist ähnlich zu Lisp auf die wichtigsten Punkte"), das ist nicht so mit Java. Stattdessen, Sie würde am Ende mit zu auch der Umsetzung der parser und die Bibliotheken. Darüber hinaus auch mit der Lisp-Implementierung, die fehlende Benutzung von Prolog-syntax und Bibliotheken verhindert, dass Sie mit jedem extern verfügbar Prolog-Bibliotheken.
- Sicher, man kann behaupten, dass man die Wiederverwendung der Java-syntax und Bibliotheken in ähnlicher Weise, wie würden Sie nutzen anonyme Objekte anstelle von Schließungen. Aber wie jeder, der mit funktionaler Programmierung-Erfahrung, der dies versucht hat, kennt die Komplexität und die Ausführlichkeit der syntax nur macht das meistens nur eine schmerzhafte übung.
- Haben Sie versucht, Drools? Es ist ein full-production-system (rete) in Java und einfache Bereitstellung. jboss.org/drools
InformationsquelleAutor Sami | 2009-11-29
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Wikipedia, die folgenden Versionen von Prolog-Java-Schnittstellen. Ich habe in Verbindung mit den wichtigsten Seiten für Sie:
Viel Glück bei Ihrer Suche!
SWI-prolog Eine sehr beliebte Umsetzung scheint ein Java-Schnittstelle wie SiCStus das wäre einfacher als die Verwendung von JNI zu instanziieren eine Instanz in der Java-Prozess. Ich habe sowohl von C eine ganze Weile her und empfehlen Sie. Meine prefference wäre SWI, wie es ist open-source und aus meiner Erfahrung ist die de facto Umsetzung.
In der Dokumentation für SWI-Java-interface scheint angemessen zu sein, und die Einbettung Prozess Recht geradlinig.
Habe ich benötigt, um die gleiche vor 2 Jahren. Ich verwendet SWI-Schnittstelle, die aufgerufen wird, JPL. Es ermöglicht das laden einer Prolog-Datei, behaupten, auf es und eine Abfrage auf es. Es nicht erforderlich, eine installation von SWI-Prolog, aber das ist überhaupt kein problem. SWI-Prolog ist für viele Plattformen verfügbar.
Habe ich auch versucht, alternativen, die zu 100% in Java implementiert und nicht benötigte externe Programme. Alle waren buggy oder schwer zu bedienen. Vergeuden Sie nicht Ihre Zeit.
Amzis prolog gewesen herum für eine Weile. Ich habe es kurz, aber nicht die embedded version. aber Sie haben eine gute Dokumentation und support gekauft werden können. Sie haben Java-port, so könnte es einen Blick Wert sein.
LPA bietet sich die LPA Intelligence Server als eine Möglichkeit der Einbindung, seine Prolog-engine in eine ganze Reihe von mainstream-Sprachen wie Java, .Net usw
Clive
http://www.lpa.co.uk/int.htm
Zwei kommerzielle Prologe geschrieben in Java: Minerva von IF Computer Japan und Jekejeke. Beide sind sehr nah an der ISO-Norm.
Clojure ist eine JVM-basierte Lisp-ähnliche Sprache, mit einer Bibliothek (core.Logik) Förderung der Logik und der constraint-basierten Programmierung. Clojure hat auch eine große Anzahl von Einrichtungen für die Erzeugung von java-Klassen und arbeiten mit java-code, so inter-op zwischen den beiden Sprachen ist trivial.
Können Sie auch einen Blick auf die Prol-Motor, die ich erstellt. Es ermöglicht das einbetten von Prolog in Ihre Java-Programme (aber es ist nicht sehr schnell ein)
Prova 3.0 http://www.prova.ws ist kurz vor der Fertigstellung. Es ist jedoch nicht nur ein Prolog, sondern eine Mischung von Programmier-Stile, besonders, nützlich für die einfache bidirektionale Java-integration reaktiver agent-Programmierung, integration mit ESB ' s, workflow-Logik, und event processing. Diese version ist eine komplette Neuentwicklung von null, so dass einige ältere features, wie OWL-integration, die fehlen, aber die sind zur Rücksendung verpflichtet, in der nächsten revision.
Gibt es Mini-Kanren für Scala, die Ihnen eine native JVM Implementierung eine schlanke, hackable, moderne Horn-Klausel-basierte Logik-Programmiersprache.
Andere lohnenswerte option ich kam vor kurzem across JSetL. Es ist kein Prolog, aber
ein constraint-Programmierung Bibliothek für Java, mit Unterstützung für Logik-Variablen,
Vereinigung, constraint solving und nicht-Determinismus.
http://prmat.math.unipr.it/~gianfr/JSetL/index.html
Gibt es eine Reihe von Prolog-Implementierungen in Java. Sie sind nicht sehr schnell, aber praktisch für die Verwendung innerhalb von Java.
Beispiele sind:
TuProlog oder
PrologCafe
Sie können auch einen Blick auf die folgende Bachelor-Arbeit zu dem Thema
Durchführung und Auswertung von Prolog-Programmen in Java.
Prof. Paul Tarau zur Verfügung gestellt von seine Seite mehrere Implementierungen
Dschinni Prolog
Kernel-Prolog