1 1. Limbajul Prolog ➢ Limbajul Prolog (PROgrammation en LOGique) a fost elaborat la Universitatea din Marsilia în jurul anului 1970, ca instrument pentru programarea ȋi rezolvarea problemelor ce implicau reprezentări simbolice de obiecte ȋi relaţii dintre acestea. ➢ Prolog are un câmp de aplicaţii foarte larg: baze de date relaţionale, inteligenţă artificială, logică matematică, demonstrarea de teoreme, sisteme expert, rezolvarea de probleme abstracte sau ecuaţii simbolice, etc. ➢ Există standardul ISO-Prolog. ➢ Nu există standard pentru programare orientată obiect ۺn Prolog, există doar extensii: TrincProlog, SWI-Prolog. ➢ Vom studia implementarea SWI-Prolog – sintaxa e foarte apropiată de cea a standardului ISO-Prolog. ▪ Turbo Prolog, Visual Prolog, GNUProlog, Sicstus Prolog, Parlog, etc. ➢ SWI-Prolog – 1986 ▪ oferă o interfață bidirecțională cu limbajele C ܈i Java ▪ folose܈te XPCE – un sistem GUI orientat obiect ▪ multithreading – bazat pe suportul multithreading oferit de limbajul standard C. Program Prolog ➢ caracter descriptiv: un program Prolog este o colecţie de definiţii ce descriu relaţii sau funcţii de calculat – reprezentări simbolice de obiecte ܈i relații ۺntre obiecte. Soluţia problemelor nu se mai vede ca o execuţie pas cu pas a unei secvenţe de instrucţiuni. ▪ program – colecție de declarații logice, fiecare fiind o clauză Horn de forma p, q p , q p p p n ... 2 1 ▪ concluzie de demonstrat – de forma n p p p ... 2 1 ➢ Structura de control folosită de interpretorul Prolog ▪ Se bazează pe declarații logice numite clauze o fapt – ceea ce se cunoa܈te a fi adevărat o regulă - ce se poate deduce din fapte date (indică o concluzie care se ܈tie că e adevărată atunci cȃnd alte concluzii sau fapte sunt adevărate) ▪ Concluzie ce trebuie demonstrată - GOAL o Prolog folose܈te rezoluția (liniară) pentru a demonstra dacă concluzia (teorema) este adevărată sau nu, pornind de la ipoteza stabilită de faptele ܈i regulile definite (axiome). o Se aplică raționamentul ۺnapoi pentru a demonstra concluzia o Programul este citit de sus ۺn jos, de la dreapta la stȃnga, căutarea este ۺn adȃncime (depth-first) ܈i se realizează folosind backtracking.