Perché i motori delle regole non sono scritti in Prolog? [chiuso]


16

Da quello che ho visto di Prolog, sembra che sarebbe l'ideale per creare un motore di regole per un'app. Tuttavia, non credo di aver mai visto un motore di regole scritto in Prolog. Esistono alcune limitazioni intrinseche in Prolog (ad es. Un algoritmo di raccolta dei rifiuti scadente) che ne impedirebbe l'utilizzo per costruire un motore di regole?


7
La scala a pioli. (quasi) nessuno conosce il prologo e ancora più sviluppatori non vogliono sapere nulla che non possa svolgere il loro lavoro quotidiano in modo da poter tornare a casa. Peccato, Prolog è piuttosto figo.
Jimmy Hoffa,

3
Prolog è un grande edsl però. Incorporare il prologo in una lingua come Haskell o Scheme è l'approccio che di solito prendo
Daniel Gratzer

3
@JimmyHoffa Questo sta diminuendo. Alcune persone imparano il prologo e poi cercano di dimenticarlo in modo proattivo per il resto della loro vita lavorativa.
ZJR,

5
Vedo 3 voti ravvicinati: a qualcuno interessa dirmi cosa c'è che non va nella domanda, in modo che io possa risolverlo o ritirarlo?
Onorio Catenacci,

2
Ho votato per chiudere come "principalmente basato sull'opinione". Se riesci a convincermi del contrario, ritirerò il mio voto ravvicinato. Personalmente ho scoperto che Prolog era opaco; Mi aspetto che un motore di regole abbia una sintassi più intuitiva per la definizione delle regole. Ed è un linguaggio di programmazione, non un prototipo di sintassi per un motore di regole in sé.
Robert Harvey,

Risposte:


14

I motori delle regole nella loro infanzia sono stati scritti quasi esclusivamente in Prolog - era il linguaggio logico. Per un piccolo insieme di regole hanno funzionato alla grande. Tuttavia, si è scoperto che non si adattavano molto bene. Non ho un riferimento definitivo, ma la mia comprensione è che il modo in cui Prolog gestisce il concatenamento delle regole è inefficiente: il modello ricorsivo creato per creare stack molto grandi che lo hanno portato a gattonare.

Lo sviluppo dell'algoritmo RETE e dei suoi successori ha consentito un modo più efficiente di elaborare grandi quantità di regole, e così ha preso il sopravvento.

Forse il prologo moderno sarebbe più efficiente rispetto agli anni '80, quando la maggior parte dei primi lavori fu terminata.



1
Un altro articolo che tratta questo: haleyai.com/wordpress/2013/06/22/…
Matthew Flynn,

Domanda folle. Le persone non hanno implementato RETE in prolog, ottenendo così il meglio da entrambe le parole? (c'è molto che RETE non fa come fa il prologo).
user48956

14

Risposta ironica: perché se i creatori di Rules Engines fossero a conoscenza di Prolog (o Mercury o PLANNER o ...) non avrebbero scritto Rules Engines, avrebbero usato Prolog.


5

Generalmente, il punto di un motore di regole è che fa parte di un'altra applicazione. È piuttosto raro vedere applicazioni scritte in Prolog e non esiste un'interfaccia comunemente disponibile per connettere Prolog ad applicazioni scritte in altre lingue.

Uno strumento basato su regole per i motori di regole, che è stato scritto per essere aggiunto ad altre applicazioni, è CLIPS . CLIPS era basato su OPS5 e utilizza l' algoritmo Rete per le regole di potatura.


non del tutto vero, ci sono alcune interfacce da programmi esterni al codice Prolog. SWI-Prolog ha un'interfaccia C ++ e un modo per connettersi a R.
Rudolf Olah,

3
In realtà tutti i motori prolog che ho visto funzionano con C o C ++ come "nessuno" usa Proolog per app complete, ma "tutti" hanno modi di chiamare le funzioni C per chiamare librerie specializzate. cioè GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes

Grazie per quel puntatore @johannes. Non ero affatto a conoscenza di GNU Prolog; tanto meno il fatto che possa essere chiamato da C.
Onorio Catenacci il

Vedi anche: swi-prolog.org
user48956
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.