Warum sind Regelmaschinen nicht in Prolog geschrieben? [geschlossen]

16

Nach dem, was ich von Prolog gesehen habe, scheint es ideal zu sein, um eine Regel-Engine für eine App zu erstellen. Ich glaube jedoch nicht, dass ich jemals eine in Prolog geschriebene Regelengine gesehen habe. Gibt es eine inhärente Einschränkung in Prolog (z. B. ein schlechter Garbage Collection-Algorithmus), die verhindern würde, dass er zum Erstellen einer Regel-Engine verwendet wird?

Onorio Catenacci
quelle
7
Die Leiter. (fast) niemand kennt sich mit Prolog aus, und noch mehr Entwickler möchten nichts wissen, das ihre tägliche Arbeit nicht erledigt, damit sie nach Hause gehen können. Leider ist Prolog ziemlich cool.
Jimmy Hoffa
3
Prolog macht allerdings ein tolles Edsl. Das Einbetten eines Prologs in eine Sprache wie Haskell oder Scheme ist der Ansatz, den ich normalerweise verfolge
Daniel Gratzer,
3
@ JimmyHoffa Das nimmt ab. Manche Menschen lernen Prolog und versuchen es dann proaktiv für den Rest ihres Arbeitslebens zu vergessen.
ZJR
5
Ich sehe 3 enge Abstimmungen. Möchte mir jemand sagen, was mit der Frage nicht stimmt, damit ich sie reparieren oder zurückziehen kann?
Onorio Catenacci
2
Ich habe als "hauptsächlich meinungsbasiert" gestimmt. Wenn Sie mich anders überzeugen können, werde ich meine enge Abstimmung zurückziehen. Ich persönlich fand Prolog undurchsichtig; Ich würde erwarten, dass eine Regel-Engine eine intuitivere Syntax zum Definieren von Regeln hat. Und es ist eine Programmiersprache, kein Syntaxprototyp für eine Regel-Engine an sich.
Robert Harvey

Antworten:

15

Regel-Engines in den Kinderschuhen wurden fast ausschließlich in Prolog geschrieben - es war die logische Sprache. Für ein kleines Regelwerk haben sie großartig funktioniert. Es stellte sich jedoch heraus, dass sie nicht sehr gut skalierten. Ich habe keine definitive Referenz, aber ich verstehe, dass die Art und Weise, wie Prolog die Verkettung von Regeln handhabt, ineffizient ist - das rekursive Modell, das zum Erstellen sehr großer Stapel erstellt wurde, die es zum Crawlen brachten.

Die Entwicklung des RETE-Algorithmus und seiner Nachfolger ermöglichte eine effizientere Verarbeitung großer Mengen von Regeln und übernahm somit.

Vielleicht wäre ein moderner Prolog effizienter als in den 80er Jahren, als der Großteil der frühen Arbeiten erledigt war.

Matthew Flynn
quelle
Siehe auch: stackoverflow.com/questions/3364191/…
Matthew Flynn
1
Ein weiterer Artikel zu diesem Thema
Matthew Flynn
Verrückte Frage. Haben die Leute RETE nicht in Prolog implementiert und so das Beste aus beiden Wörtern herausgefunden? (Es gibt eine Menge, die RETE nicht so macht wie der Prolog.)
User48956
14

Zungenbrecherische Antwort: Wenn die Entwickler von Rules Engines von Prolog (oder Mercury oder PLANNER oder ...) wüssten, würden sie keine Rules Engines schreiben, würden sie Prolog verwenden.

Jörg W. Mittag
quelle
5

Im Allgemeinen besteht der Sinn einer Regelengine darin, dass sie Teil einer anderen Anwendung ist. In Prolog geschriebene Anwendungen sind eher selten zu sehen, und es gibt keine allgemein verfügbare Schnittstelle, um Prolog mit in anderen Sprachen geschriebenen Anwendungen zu verbinden.

Ein regelbasiertes Tool für Regel-Engines, das geschrieben wurde, um anderen Anwendungen hinzugefügt zu werden, ist CLIPS . CLIPS basierte auf OPS5 und verwendet den Rete-Algorithmus zum Bereinigen von Regeln.

Tangurena
quelle
Nicht ganz richtig, es gibt einige Schnittstellen von externen Programmen zu Prolog-Code. SWI-Prolog hat eine C ++ Schnittstelle und eine Möglichkeit, sich mit R.
Rudolf Olah
3
Tatsächlich funktionieren alle Prolog-Engines mit C oder C ++, da "nobody" Proolog für vollständige Apps verwendet, "everybody" jedoch Möglichkeiten zum Aufrufen von C-Funktionen zum Aufrufen spezialisierter Bibliotheken bietet. dh GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes
Danke für den Hinweis @johannes. Ich wusste überhaupt nichts von GNU Prolog. viel weniger die Tatsache, dass es von C aufgerufen werden kann
Onorio Catenacci
Siehe auch: swi-prolog.org
user48956