Magazine Informatica

Prolog e programmazione logica

Creato il 17 gennaio 2012 da Hnikarr

Il Prolog è un linguaggio di programmazione sviluppato agli inizi degli anni ’70 a Marsiglia, a opera di Alain Colmerauer e il suo gruppo di ricerca. Sull’etimologia del nome si possono trovare almeno tre versioni, quasi identiche, che si differenziano per la lingua in cui sono formulate: -programmation en logique; -programmation et logique; -programming in logic. Come è ovvio, Prolog deriva dalla fusione della prima sillaba delle due parole. Il nome stesso, dunque, ci indica quale sia l’obiettivo del Prolog, o almeno l’obbiettivo che il suo creatore si è posto, disegnando questo linguaggio: programmare attraverso la logica. Idea piuttosto interessante e ambiziosa, in un mondo dominato dalla matematica, dove i computer erano soprattutto grandi masticatori di numeri, ma una idea che aveva una sua ragione di esistere moto precisa. Colmerauer stesso, infatti, non si occupava tanto di matematica, quanto piuttosto di linguistica computazionale: la sua esigenza era quella di trovare uno strumento che lo assistesse in questo campo. Il Prolog è il risultato che ha raggiunto. Parafrasando Sergio Leone, i linguaggi di programmazione si possono dividere in due categorie: i linguaggi procedurali e i linguaggi dichiarativi. I linguaggi procedurali sono composti da una serie di istruzioni che indicano al computer come deve essere svolto un certo compito. Esempio supremo di questo stile è il linguaggio C e i suoi derivati. I linguaggi dichiarativi, invece, dicono al computer cosa deve fare, lasciando al computer stesso la scelta di come farlo. O almeno, così dovrebbero funzionare in teoria, ma in pratica anche i linguaggi dichiarativi devono inserire alcuni suggerimenti su quale sia la strada migliore. Il Prolog appartiene alla categoria dei linguaggi dichiarativi. Un comune programma in Prolog è composto da una serie di fatti, che descrivono cose e situazioni sempre vere, e una serie di regole, che permettono di dedurre nuove situazioni vere sulla base dei fatti a disposizione. Questo è il nucleo della programmazione logica, così come è fornita dal Prolog. Noi forniamo al programma una serie di informazioni vere, aggiungiamo un’altra serie di regole che descrivono il modo in cui le informazioni si combinano tra loro e infine interroghiamo il programma. Compito dell’uomo, secondo la filosofia alla base del Prolog, è fornire i dati al computer e spiegargli come metterli in relazione tra loro per produrre nuovi dati e nuove informazioni; il computer, poi, si occuperà trovare le soluzioni e rispondere alle domande. Le regole sono il mezzo attraverso cui un programma in Prolog processa i dati e le regole sono basate sulle clausole di Horn, ossia “X è vero se Y è vero”. Una regola, dunque, è formata da una testa, che contiene ciò che deve essere dimostrato, e un corpo, che contiene le condizioni necessarie per la dimostrazione. Per esempio: -un animale è un pesce (testa), se vive nell’acqua e respira con le branchie (corpo).
Se noi inseriamo questa regola in un programma in Prolog, e poi gli chiediamo se l’animale Pincopallino è un pesce, il programma cercherà di dimostrare, o attraverso i fatti in sui possesso o attraverso altre regole, che Pincopallino vive nell’acqua e ha le branchie. Se riesce a dimostrarlo, ci risponderà che Pincopallino è un pesce; se non riesce a dimostrarlo, ci risponderà che non lo è. Un programma in Prolog è fondamentalmente un database di fatti e regole, relativo al campo che ci interessa esaminare attraverso il nostro computer. Tutto ciò può sembrare piuttosto strano, a chi è abituato ad altri tipi di programmazione, ma ha una sua logica, soprattutto se pensiamo al contesto in cui si è sviluppato il Prolog. La prima applicazione del Prolog è stata proprio nel campo della linguistica computazionale, un campo in cui non contavano tanto i numeri o complessi calcoli matematici, quanto piuttosto trovare le relazioni tra le parole, ordinarle e analizzarle. Un lavoro di questo genere si può svolgere più facilmente con un linguaggio di programmazione che permette di muoversi tra concetti, piuttosto che tra numeri: noi spieghiamo attraverso fatti e regole come è composta una frase, come funziona la grammatica di una data lingua, eccetera, e poi utilizziamo questo programma per analizzare frasi o testi. Come è facile da capire, questa sua caratteristica ha presto reso il Prolog uno dei linguaggi di maggior “peso” nel campo dell’intelligenza artificiale, accanto al sempre presente LISP. Per certi versi, possiamo anche dire che, almeno alla fine del secolo scorso, i linguaggi di programmazione LISP e Prolog erano, per le ricerche sull’intelligenza artificiale, ciò che latino e greco sono per gli studi classici. In seguito anche altri linguaggi si sono fatti strada in questo campo di ricerca, ma non addentriamoci oltre in questa discussione, perché ci porterebbe molto lontano. Diciamo solo che il Prolog è tuttora un linguaggio dall’alto peso specifico, quando si parla di intelligenze artificiali. Se la linguistica computazione è il contesto in cui è nato, col tempo il Prolog ha allargato il proprio campo di azione anche al di fuori dell’analisi linguistica. A tutt’oggi, i contesti in cui il Prolog trova grande applicazione sono appunto la già citata analisi linguistica e grammaticale, con tutto ciò che a essa si unisce, come traduzioni automatiche e affini; la rappresentazione della conoscenza, con annessi ragionamenti su quella conoscenza; pianificazione e ricerca; eccetera eccetera. Dovunque ci siano da analizzare informazioni, metterle in relazione tra loro e dedurre qualcosa, il Prolog è spesso un’ottima scelta.
Come anche il LISP, il Prolog esiste in vari “dialetti”, ossia in versioni che si discostano in modo più o meno considerevole dalla versione “comune”, per adattarsi a usi particolari o a esigenze di chi ha sviluppato quella particolare variante. Alcuni esempi che si possono scaricare  e utilizzare gratuitamente sono: SWI-Prolog (forse il migliore, per i sistemi Windows) Ciao GNU Prolog Tutti questi si possono anche utilizzare come librerie all’interno di un programma in Java, magari per fornire il motore logico a una particolare applicazione, oppure per facilitare la distribuzione di un programma in Prolog. Una introduzione al linguaggio di programmazione, nonché al sistema logico su cui si basa, la potete trovare in italiano in questa pagina sul sito dell’Università di Parma.

Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :