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 demonstra- 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.