Domanda

Nella lettura su vincolo-logica di programmazione , non posso fare a meno di notare un apparente relazione con la programmazione SQL. SQL è un esempio di "programmazione logica vincolo" in azione?

È stato utile?

Soluzione

Sono molto simili da un livello elevato. Entrambi sono dichiarativa o un set di base piuttosto che iterativo (nel senso di chiedere quello che vuoi - non lo fai scorrere ed elaborare i singoli elementi uno per uno).

CLP può essere modellato in SQL, ma si tratta di un caso di trovare una soluzione migliore ad un problema. SQL è un bene per trovare risposte in un dato insieme di dati che è già definito in modo esplicito. CLP è buono per trovare risposte a domini che sono vagamente o talvolta addirittura non addirittura completamente definiti.

A titolo di esempio. Se avessi voluto per restituire tutti i numeri pari tra 1 e 10 milioni di utilizzo di SQL avrei bisogno di una tabella con tutti i numeri elencati da selezionare (un set di dati già esistente). Utilizzando CLP Vorrei solo bisogno di un bound (10M), ma non avrebbe dovuto creare esplicita tutti i record.

motori Internamente CLP (problemi CSP) possono dedurre i vincoli per renderli più veloci. SQL si dovrebbe capire quelle regole e di dichiarare in modo esplicito. Ad esempio se il vostro SQL è dove A = B e B = C, un motore di CLP potrebbero capire che A = C e l'uso che per correre più veloce in cui SQL no. Possono analogamente dedurre domini anche per la fase di esecuzione ottimizzare (se so che i numeri pari sono mai restituito un CLP li buttare fuori dalla considerazione - SQL sarà ancora li in considerazione, ma non ritorno, una "soluzione").

Si spera che aiuta - posso ottenere più tecnico se ne avete bisogno. Il punto chiave da ricordare è che i due sono simili, ma che si utilizza dipende dal modello problema. Se si può dire "queste sono le mie variabili, e questi sono come l'interagiscono, darmi alcuna soluzione valida", allora CLP è un buon candidato. Se si può dire "ci sono le mie variabili, e queste sono le specifiche, restituirmi un sottoinsieme dei miei dati esistenti che si adatta" quindi SQL è un candidato migliore.

Altri suggerimenti

Non ho una risposta completa, ma si potrebbe trovare interessante da guardare Datalog e DLV. Sono forse "l'anello mancante" tra la Programmazione Logica (ma non CLP) e SQL che vi aiuterà a capire le cose più chiaramente.

Dato che si tratta di più su LP di CLP forse ho perso qualcosa -. Se è così, mi dispiace

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top