Pourquoi les moteurs de règles ne sont-ils pas écrits en Prolog? [fermé]

16

D'après ce que j'ai vu de Prolog, il semble que ce serait idéal pour créer un moteur de règles pour une application. Pourtant, je ne pense pas avoir jamais vu un moteur de règles écrit en Prolog. Y a-t-il une limitation inhérente à Prolog (par exemple, un mauvais algorithme de collecte des ordures) qui l'empêcherait d'être utilisé pour construire un moteur de règles?

Onorio Catenacci
la source
7
L'échelle. (presque) personne ne connaît prolog, et encore plus de développeurs ne veulent rien savoir qui ne fasse pas leur travail quotidien pour pouvoir rentrer chez eux. Malheureusement, Prolog est plutôt cool.
Jimmy Hoffa
3
Prolog fait cependant un grand edsl. L'intégration de prologue dans une langue comme Haskell ou Scheme est l'approche que je prends habituellement
Daniel Gratzer
3
@JimmyHoffa Cela diminue. Certaines personnes apprennent le prologue puis essaient de l'oublier de manière proactive pour le reste de leur vie professionnelle.
ZJR
5
Je vois 3 votes serrés - quelqu'un veut-il me dire quel est le problème avec la question afin que je puisse la corriger ou la retirer?
Onorio Catenacci
2
J'ai voté pour la fermeture comme "principalement basée sur l'opinion". Si vous pouvez me convaincre du contraire, je retirerai mon vote serré. J'ai personnellement trouvé Prolog opaque; Je m'attendrais à ce qu'un moteur de règles ait une syntaxe plus intuitive pour définir des règles. Et il est un langage de programmation, et non pas un prototype de syntaxe pour un moteur de règles en soi.
Robert Harvey

Réponses:

14

Les moteurs de règles à leurs balbutiements étaient écrits presque exclusivement en Prolog - c'était le langage logique. Pour un petit ensemble de règles, ils ont très bien fonctionné. Cependant, il s'est avéré que leur échelle n'était pas très bonne. Je n'ai pas de référence définitive, mais je crois comprendre que la façon dont Prolog gère le chaînage des règles est inefficace - le modèle récursif conçu pour créer de très grandes piles qui l'a amené à une analyse.

Le développement de l'algorithme RETE et de ses successeurs a permis de traiter plus efficacement de grandes quantités de règles et a donc pris le relais.

Peut-être que le prologue moderne serait plus efficace que dans les années 80, lorsque la plupart des premiers travaux ont été effectués.

Matthew Flynn
la source
Voir aussi: stackoverflow.com/questions/3364191/…
Matthew Flynn
1
Un autre article traitant de cela: haleyai.com/wordpress/2013/06/22/…
Matthew Flynn
Question folle. Les gens n'ont-ils pas implémenté RETE dans prolog, obtenant ainsi le meilleur des deux mots? (il y a beaucoup de choses que RETE ne fait pas comme prologue).
user48956
14

Réponse ironique: parce que si les créateurs de Rules Engines connaissaient Prolog (ou Mercury ou PLANNER ou…), ils n'écriraient pas de Rules Engines, ils utiliseraient Prolog.

Jörg W Mittag
la source
5

Généralement, l'intérêt d'un moteur de règles est qu'il fait partie d'une autre application. Il est assez rare de voir des applications écrites dans Prolog, et il n'y a pas d'interface couramment disponible pour connecter Prolog à des applications écrites dans d'autres langues.

CLIPS est un outil basé sur des règles pour les moteurs de règles, qui est écrit pour être ajouté à d'autres applications . CLIPS était basé sur OPS5 et utilise l' algorithme Rete pour les règles d'élagage.

Tangurena
la source
pas entièrement vrai, il existe des interfaces de programmes externes vers le code Prolog. SWI-Prolog a une interface C ++ et un moyen de se connecter à R.
Rudolf Olah
3
En fait, tous les moteurs prolog que j'ai vus fonctionner avec C ou C ++ car "personne" n'utilise Proolog pour des applications complètes, mais "tout le monde" a des façons d'appeler des fonctions C pour appeler des bibliothèques spécialisées. ie GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes
Merci pour ce pointeur @johannes. Je n'étais pas du tout au courant de GNU Prolog; beaucoup moins le fait qu'il peut être appelé de C.
Onorio Catenacci
Voir aussi: swi-prolog.org
user48956