Datalog vs CLIP vs Prolog
-
29-09-2019 - |
Domanda
Come molti programmatori ho studiato Prolog in università, ma solo molto poco. Capisco che Prolog e Datalog sono strettamente correlati, ma Datalog è più semplice? Inoltre, credo che ho letto che Datalog non dipende ordinamento delle clausole di logica, ma non sono sicuro perché questo è vantaggi. CLIP è presumibilmente del tutto diverso, ma è troppo sottile per me capire. Qualcuno può fornire un salienti generali dei linguaggi sopra le altre lingue?
Soluzione
Datalog è un sottoinsieme di Prolog. il sottoinsieme che Datalog porta ha due cose in mente:
- adottare un'API che consentirà di sostenere le regole e le query
- Assicurarsi che tutte le query terminano
prologo è Turing completo. Datalog non è.
Come Datalog fuori strada, vediamo come prologo confronta con i clip.
L'esperienza di Prolog è "problem solving", mentre clip è un "sistema esperto". Se ho capito bene, "problem solving" coinvolge competenze utilizzando codice e dati. "Sistemi esperti" per lo più utilizzano strutture dati per esprimere competenza. vedi http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems
Un altro modo di vedere le cose è:
sistemi esperti operano sul presupposto che la maggior parte (se non tutti) i risultati sono noti. tutti questi risultati sono compilati in dati e quindi viene alimentato in un sistema esperto. dare al sistema esperto uno scenario, il sistema esperto calcola il risultato dei dati raccolti, alias base di conoscenze. è sempre un "un numero pari più un numero pari è sempre anche" tipo di pensiero.
sistemi di problem solving hanno una visione incompleta del problema. così uno inizia con modellazione dati e comportamenti, che comprendono la base di conoscenza (questo dà giustizia al termine "caso angolo") e finisce con "se si aggiungono due a sei, si finisce con otto. è otto divisibile per due? allora è anche "
Altri suggerimenti
La differenza tra clip e Prolog / Datalog è che i clip è un "sistema di regole di produzione" che opera da avanti concatenazione : dato un insieme di fatti e regole, si cercherà di fare ogni possibile derivazione di nuovi fatti e conservare quelli in memoria. Una query viene poi risposto verificando se corrisponde qualcosa nel negozio realtà. Così, nei clip, se si dispone di (pseudo-sintassi):
parent(X,Y) => child(Y,X)
parent(john,mary)
lo farà immediatamente derive child(mary,john)
e ricordare questo fatto. Questo può essere molto veloce, ma mette restrizioni alla possibile set di regole e prende la memoria.
Prolog e Datalog operano concatenamento all'indietro , il che significa che una query (chiamata predicato) viene risposto tentando di dimostrare l'interrogazione, ossia l'esecuzione del programma Prolog / Datalog. Prolog è un linguaggio di programmazione Turing completa, in modo che qualsiasi algoritmo può essere implementato in esso.
Datalog è un sottoinsieme non Turing completa di Prolog che non consente, ad esempio, negazione. Il suo principale vantaggio è che ogni Datalog termina di programma (nessun loop infinito). Questo lo rende utile per i cosiddetti "database deduttivi," vale a dire database con le regole in aggiunta ai fatti.