Prolog è un linguaggio di programmazione per computer basato sulla logica. La maggior parte dei linguaggi per computer si basa sui passaggi necessari per risolvere un problema. Il linguaggio Prolog, invece, è un linguaggio “dichiarativo” che indica le relazioni logiche tra le entità. Il modo per risolvere il problema è lasciato al computer. Il nome Prolog deriva dal francese PROgrammation en LOGique, cioè PROgramming LOGic.
Quello che segue è un semplice programma Prolog:
antenato(F, C) :- padre(F, C)
antenato(P, Q) :- padre(P, R), antenato(R, Q)
padre (giovanni, jim).
padre (jim, jerry).
padre (jerry, jason).
padre (jerry, jeff).
padre (giasone, giosuè).
Il programma di cui sopra indica verità ovvie. Se F è padre di C, allora F è un antenato di C. Se P è il padre di una persona R che è un antenato di Q, allora P è un antenato di Q. Vengono quindi dati un certo numero di fatti veri, come john è il padre di jim. Se quindi viene posta una domanda problematica sul fatto che john sia un antenato di jeff, otteniamo la risposta “Sì” come di seguito:
?- antenato (john, jeff).
Sì
Se gli antenati di Giosuè sono interessanti, il programma mostra tutti gli antenati come segue:
?- antenato (A, giosuè)
A = jason
A = jerry
A = jim
A = giovanni
Si noti che in entrambi i casi precedenti, il programma non ha indicato come eseguire la valutazione. Ad esempio, non ha indicato se iniziare dalla persona più anziana e proseguire verso la persona più giovane o viceversa. Anche scambiando le parti come di seguito:
antenato(P, Q) :- antenato(R, Q), padre(P, R)
Non farebbe alcuna differenza per il programma, poiché entrambe queste parti sul lato destro devono essere vere affinché il lato sinistro sia vero.
Il linguaggio Prolog si concentra quindi sulle relazioni, e non su come risolvere il problema. Durante l’esecuzione del programma, Prolog costruisce una serie di affermazioni vere, creando una base di conoscenza. Nell’esempio sopra, la knowledge base, in nessun ordine particolare, avrebbe ancestor (john, jim), ancestor (jim, jerry), ancestor (john, jerry), ancestor (jim, jason), ancestor (john, jason), e così via. Questa base di conoscenza può continuare a crescere durante l’esecuzione del programma e può essere ricercata in modo efficiente per ottenere soluzioni. L’esecuzione può utilizzare l’elaborazione parallela, l’esecuzione simultanea da più computer.
Il linguaggio Prolog è utilizzato in diverse aree. È iniziato con sistemi orientati alle lingue naturali come l’inglese; il linguaggio naturale è una delle aree dell’intelligenza artificiale. Il linguaggio Prolog è utilizzato anche nella matematica simbolica, inclusa l’algebra. Viene utilizzato nella dimostrazione di teoremi, nei sistemi esperti e nei sistemi di controllo, tra molte altre applicazioni.