Documente Academic
Documente Profesional
Documente Cultură
INTRODUCERE PROLOG
Scurt istoric. Bibliografie. Mod de operare.
Scurt istoric
-
--> ciudat(main_rapid).
--> util(masin_mare).
ntrebarea:
Ce i place la Bill ?
va fi redactat:
place(bill, Ce).
Notai c sintaxa Prolog nu se schimb atunci cnd punei o ntrebare. Este important de notat c al
doilea obiect (Ce) ncepe cu majuscul, n timp ce primul (bill) ncepe cu minuscul. Acest lucru se
ntampl deoarece bill este o constant (o valoare cunoscuta) iar Ce este o variabil. n general,
constantele ncep cu liter mic, iar variabilele cu liter mare.
La ntrebarea de mai sus Prolog va rspunde:
Ce = cini
Ce = cindy
2 Solutions
La ntrebarea:
place(cindy, Ce).
Prolog va rspunde:
Ce = cini
Ce = cindy
Ce = bill
3 Solutions
Punerea faptelor, regulilor i ntrebrilor la un loc
S analizm urmtorul program Prolog:
predicates
place(symbol, symbol)
clauses
place(ellen, tenis).
place(john, fotbal).
place(tom, basket).
place(eric, not).
place(mark, tenis).
place(bill, Activitate) if
place(tom, Activitate).
n seciunea predicates se vor plasa toate faptele definite mpreun cu tipul parametrilor lor. Aici, toi
parametrii sunt simboluri.
3
n seciunea clauses se trec toate definiiile despre aceste fapte precum i regulile de deducie.
Dup ce ai scris acest program, apasai Alt-R pentru a-l rula. Sistemul va raspunde cu Goal: n
fereastra Dialog. La acest prompter, vei cere, de exemplu:
place(bill, basket).
iar Prolog va raspunde cu
Yes
goal:
Variabile: propoziii generale
n Prolog, variabilele v ajut s scriei fapte generale i reguli, i s cereti Rspuns la ntrebri.
Afirmaii generale tipice ar putea fi:
Lui Bill i plac aceleai lucruri ca lui Kim.
Temperatura curent este o temperatur oarecare, i aceast temperatur oarecare este
cald.
Iat aceste lucruri scrise n Prolog:
place(bill, Lucruri) and place(kim, Lucruri).
temperatur(TempCrt) and cald(TempCrt).
vegetal(Mncare_de_pe_meniu) and
pe_lista_doctorului(Mncare_de_pe_meniu).
2. printe(Persoana1, Persoana2) if
tata(Persoana1, Persoana2).
printe(Persoana1, Persoana2) if
mama(Persoana1, Persoana2).
Se observ c sau din limbajul natural se traduce n Prolog prin dou reguli separate:
Persoana1 este parintele lui Persoana2 daca
Persoana1 este tatal lui Persoana2.
Persoana1 este parintele lui Persoana2 daca
Persoana1 este mama lui Persoana2.
3. poate_cumpra(Nume, Model) if
persoana(Nume) and
main(Model) and
place(Nume, Model) and
de_vnzare(Model).
Predicate (relaii)
Numele simbolic al unei relaii se numete numele predicatului. Obiectele la care se refer se numesc
argumentele sale.
Iat cteva exemple de predicate Prolog cu zero sau mai multe argumente:
pred(integer, symbol)
person(last, first, gender)
run
insert_mode
birthday(firstName, lastName, date)
Variabile (clauze generale)
ntr-o ntrebare simpl, putei utiliza variabile pentru a cere sistemului Prolog s gseasc informaii. De
exemplu, ntrebarea
place(X, tenis).
folosete litera X ca variabil, pentru a indica o persoan necunoscut. Numele de variabile trebuie s
nceap cu liter mare, dupa care pot urma litere, cifre i caractere underline (_).
Cum i primesc valori variabilele
Ai observat c Prolog nu are instruciuni de atribuire. Variabilele n Prolog i primesc valorile prin
potrivire cu constante din fapte sau reguli.
Pan cnd o variabil primete o valoare, ea este liber (free); cnd ea primete o valoare, ea este legat
(bound). Dar ea sta legat atta timp ct este necesar pentru a obine o soluie a problemei. Apoi, Prolog
o dezleag, face backtracking i caut soluii alternative.
Important: nu se pot stoca informaii prin atribuire de valori unor variabile.
Variabilele sunt folosite ca parte a unui proces de potrivire, nu ca un tip de stocare de informaii.
De exemplu, fie programul:
predicates
place(symbol, symbol)
clauses
place(ellen, citit).
place(john, calculatoare).
place(john, badminton).
place(leonard, badminton).
place(eric, not).
place(eric, citit).
Fie ntrebarea:
place(Persoana, citit) and place(Persoana, not).
Prolog va rezolva cele dou pri ale ntrebrii separat, cutnd n clauzele programului de sus n jos. n
prima parte,
place(Persoana, citit).
variabila Persoana este liber. Prolog caut un fapt care s se potriveasc cu aceasta prim parte:
place(ellen, citit).
Deci, Prolog leag variabila liber Persoana de constanta ellen. Acum, Prolog verific a doua parte a
ntrebrii. Deoarece Persoana este legat de ellen, trebuie verificat c:
place(ellen, not).
Prolog caut o potrivire a acestui fapt, dar nu gasete. Deci, a doua parte a ntrebrii nu este adevarat
cnd Persoana este ellen.
Prolog dezleag Persoana, i ncearc s gseasc o alt soluie a primei pri a ntrebrii, cu Persoana ca
variabil liber. Mergnd n continuare cu verificrile, Prolog va lega Persoana de constanta eric. De
aceast dat i partea a doua va fi satisfacut, deci Prolog va returna:
Persoana=eric
6
1 Solution
Not
Mecanismul prin care Prolog ncearc s potriveasc partea din ntrebare pe care dorete s o rezolve
cu un anumit predicat se numete unificare. Ca rezultat al unificrii, Prolog a legat variabila Persoana
ntr-o prim faz de constanta ellen, i mai apoi de constanta eric.
Observaie
Aceast ntrebare este o ntrebare compus. O ntrebare compus poate s conin i operatorul or. n
acest caz, and este mai prioritar dect or, iar prile de verificat vor fi identificate n acord cu acest
lucru.
Variabile anonime
Dac dorii doar anumite informaii de la o ntrebare, putei s utilizai variabilele anonime pentru a
neglija acele pri care nu v intereseaz.
n Prolog, variabila anonim este reprezentat de caracterul underscore (_).
De exemplu, dac doresc s tiu dac i place cuiva s noate, dar nu vreau s tiu cine anume, voi
ntreba:
place(_, inot).
Deasemenea, variabilele anonime pot fi folosite n reprezentarea faptelor:
are(_, pantofi).
reprezinta:
Toat lumea are pantofi.
Comentarii
Comentariile se includ intre /* i */. Alternativ, tot ceea ce apare pe o linie dup caracterul % este
comentariu:
/* comentariu */
% comentariu
/**************/
/* comentariu */
/**************/
Tema :
1. Scriei acest program n TurboProlog i apsai Alt-R pentru a-l rula. Sistemul va rspunde cu
Goal: n fereastra Dialog. La acest prompter, vei cere, de exemplu:
place(bill, tenis).
place (bill, basket).
2. Modificai acest program astfel nct lui mary s-i plac tot ceea ce i place lui bill.
3. Realizai o trasare pas cu pas a programului punnd nainte de predicates cuvntul trace care
permite o trasare pas cu pas utiliznd tasta <F10> pentru trecerea de la un pas la altul.
4. Alegei un predicat (un verb din viaa de toate zilele) i construii cu el 10 propoziii care apoi
s le transcriei ntr-un program Prolog explicnd soluiile obinute n diferite cazuri (ca i la problema
de mai sus ).
Limbajul PROLOG are un pronunat caracter descriptiv: un program PROLOG este o colecie
de definiii ce descriu relaii sau funcii de calculat. Execuia programului const n utilizarea
definiiilor pentru a gsi o relaie sau un obiect corespunztor unor specificaii date. Soluia
problemelor nu se mai vede ca o execuie pas cu pas a unei secvene de instruciuni.
PROLOG are un cmp de aplicaii foarte larg: baze de date relaionale, inteligena artificial,
logica matematic, demonstrarea de teoreme, sisteme expert, rezolvarea de probleme abstracte
sau ecuaii simbolice etc.
Bibliografie
1. Turbo PROLOG 2.0 - User's Guide
2. Turbo PROLOG 2.0 - Reference Guide
3. Marcel POPESCU, Ion FLORICA, Mihai JITARU - Metode avansate de utilizare a tehnicii de calcul,
Ed. Militar, Bucureti, 1989
Mod de operare
Turbo Prolog 2.0 este un mediu integrat de programare cu faciliti de editare, compilare i execuie a
programelor.
Mediul Turbo Prolog se apeleaz cu comanda PROLOG.
Asemntor cu mediul Turbo Pascal, sunt disponibile urmtoarele opiuni:
8
ncrcarea unui fiier: se selecteaz submeniul File (se apas Alt-F) i apoi se selecteaz
opiunea Load
crearea unui fiier nou: se selecteaz submeniul File (se apas Alt-F) i apoi se selecteaz
opiunea New-file
salvarea unui fiier: se selecteaz submeniul File (se apas Alt-F) si apoi se selecteaz opiunea
Save
salvarea unui fiier cu nume schimbat: se selecteaz submeniul File (se apas Alt-F) i apoi se
selecteaz opiunea Write-to
execuia programului din fiierul curent: se selecteaz submeniul Run (se apas Alt-R) apoi, n
fereastra Dialog se introduce predicatul de verificat
producerea de fiier executabil: se selecteaz submeniul Compile (se apas Alt-C) i apoi se
selecteaz opiunea Exe
Editorul de texte cu care este dotat acest mediu este compatibil Word Star i foarte asemntor cu
editorul de texte din Turbo Pascal.
Tema: S se realizeze un index al comenzilor de editare n acest mediu.