Perché (non) programmazione logica?

13

Non ho ancora sentito parlare di alcun uso di un linguaggio di programmazione logico (come Prolog) nell'industria del software, né ne conosco l'utilizzo nella programmazione di un hobby o in progetti open source. It (Prolog) è usato in una certa misura come linguaggio accademico (perché è usato nel mondo accademico?).

Questo mi fa meravigliare, perché dovresti usare la programmazione logica, e perché no? Perché non sta rilevando un utilizzo industriale rilevabile?

    
posta Anto 17.03.2011 - 18:43
fonte

3 risposte

8

Al di fuori del mondo accademico ... ne ho sentito parlare più nell'IA, a volte nei giochi (l'ho sentito dire che ha guidato l'intelligenza artificiale nella serie Black & White). Ho anche sentito parlare di varianti utilizzate per eseguire regole-motori per determinate aziende e simulazioni economiche.

Le mie supposizioni per mancanza di adozione diffusa sono:

  • È strano - la maggior parte delle persone non è abituata a programmare in esso e possono fare ciò di cui hanno bisogno in altre lingue.
  • Mancanza di supporto del fornitore - Se Microsoft improvvisamente ha iniziato a spingere Prolog # (con tutto il peso della libreria .NET e del supporto tecnico e supporto formale dietro di esso) come The Next Big Thing - e poi IBM e Oracle hanno trovato qualcosa da competere Scommetto che lo vedresti raccolto!
  • Mancanza di integrazione - Non so quali librerie sono disponibili per Prolog - ho controllato che non c'erano molte librerie grafiche o di rete, il che significa che un'applicazione "Prolog" deve essere racchiusa in un'altra applicazione che interagisce con resto del mondo.
risposta data 17.03.2011 - 18:54
fonte
5

L'abbiamo usato per costruire parser. È stato più facile lavorare con lex / yacc.

Why is it not getting any detectable industry usage?

Questo non è possibile rispondere. Cosa significa "rilevabile"? Chi deve ricevere il memo di rilevamento?

link

Chiedi a Meridian Software informazioni sulla loro offerta di prolog se vuoi dei fatti.

Tuttavia, ci sono alcune barriere all'entrata che ho vissuto.

Innanzitutto, il prologo può essere lento. Quando ci sono un sacco di regole per i candidati e non ci sono operazioni di taglio semplici per limitare lo spazio di ricerca, ci vuole un po 'per fare qualcosa.

In secondo luogo, il prologo non è procedurale o funzionale, quindi molti programmatori si rifiutano di usarlo. (È interessante notare che alcuni programmatori si rifiutano di usare anche l'SQL. Del resto, alcuni programmatori usano con riluttanza SQL e fanno cose strane come evitare operazioni di join, o affermano che COUNT(*) è magicamente inefficiente.)

In terzo luogo, il prologo richiede un pensiero abbastanza chiaro su quali siano i vari casi. La programmazione procedurale può essere trascurata e funziona comunque in modo affidabile. Dichiarazioni non eseguibili sono accettabili.

Quanto segue è accettabile nella maggior parte delle cerchie.

b = a + 1
if a > b: # always False

Questo tipo di pensiero oscuro ti mette nei guai nel prologo.

    
risposta data 17.03.2011 - 19:17
fonte
2

Un problema è che Prolog non è realmente programmazione nella logica del predicato del primo ordine, che è computazionalmente intrattabile (non mi ricordo in che misura, ma non è in NP, e se aggiungete aritmetica ad esso è formalmente indecidibile ). Pertanto, è una semplificazione.

Nella logica, una proposizione può essere dimostrata vera, dimostrata falsa o non dimostrata in entrambi i modi. Prolog ha solo dimostrato e non dimostrato, "non dimostrato" in genere significa falso. Inoltre, l'ordine delle clausole Prolog può influenzare l'esecuzione, il che non è il caso delle clausole logiche. Nel corso in cui l'ho usato, ho iniziato a pensare a Prolog come a un linguaggio di pattern-matching più che a un linguaggio logico.

Pertanto, la programmazione Prolog non dipende tanto dalla correttezza logica quanto il linguaggio Prolog stesso. È un linguaggio utile in qualche modo, ma non è affatto vicino al mainstream e non ha avuto lo strumento e i benefici della comunità di un linguaggio come il C ++.

    
risposta data 17.03.2011 - 21:48
fonte