Upload
flaviu-butean
View
2
Download
0
Embed Size (px)
DESCRIPTION
Laborator Prolog Facultatea de Informatica Economica
Citation preview
INTRODUCERE -- PROLOG -- Scurt istoric, Bibliografie, Mod de operare
Inteligen Artificial PROLOG Lucrarea de laborator nr. 2
INTRODUCERE PROLOG
Scurt istoric. Bibliografie. Mod de operare.Scurt istoric
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 reprezentri simbolice de obiecte i relaii dintre obiecte.
Ca i LISP, PROLOG este un limbaj cu fundament matematic.
Spre deosebire de LISP, specializat n definirea de funcii, PROLOG permite definirea i prelucrarea relaiilor.
Primul interpretor PROLOG a fos scris n limbajul FORTRAN.
Elemente fundamentale ale limbajului Prolog
Programare logicn Prolog, soluiile se obin prin deducii logice plecnd de la lucruri deja cunoscute. Un program Prolog nu este o niruire de aciuni de ndeplinit, ci o colecie de fapte mpreun cu regulile dup care se pot trage concluzii din aceste fapte.Prolog se bazeaz pe un subset al logicii predicatelor. Ofer o sintax foarte apropiat limbajului natural.
O facilitate important a limbajului Prolog este c, n plus fa de gsirea logic a rspunsurilor la ntrebri, poate trata alternativele i s gseasc toate soluiile i nu numai una dintre ele. Iat cteva exemple de afirmaii din limbajul natural itraducerile respective n logica predicatelor:
O main rapid este ciudat. --> ciudat(main_rapid).
O maina mare este util. --> util(masin_mare).
Lui Bill i place o main dac --> place(bill, Main) if
maina este rapid. ciudat(Main).Propoziii: fapte i reguliUn programator Prolog va defini obiecte i relaii, apoi va defini reguli despre cnd aceste relaii vor fi adevrate. Fapte: ceea ce se cunoaten Prolog, o relaie ntre obiecte se numete fapt. n limbajul natural o relaie este simbolizat de o propoziie. n Prolog, o relaie este sumarizat printr-o fraz simpl ce const din numele relaiei urmat ntre paranteze de obiectele participante la relaie. Ca i n limbajul natural, un fapt se termin cu punct.
De exemplu, exist mai multe fapte exprimnd plcerea n limbajul natural:
Bill o place pe Cindy.
Cindy l place pe Bill.
Lui Bill i plac cinii.
Iat aceste fapte scrise n Prolog:
place(bill, cindy).
place(cindy, bill).
place(bill, caini).
Faptele pot exprima i proprieti. De exemplu, afirmaia "Renault este o main" se scrie n Prolog:
main(renault).
Reguli: ce se poate deduce din fapte dateRegulile permit deducerea de fapte din alte fapte. Altfel spus, o regul este o concluzie care se tie c este adevarat atunci cnd alte concluzii sau fapte sunt adevrate. Iat cteva reguli privind relaia "place":
Lui Cindy i place tot ceea ce i place lui Bill.
Lui Joan i place orice main.
Fiind date aceste reguli, putei deduce din faptele cunoscute deja, c:
Lui Cindy ii place de Cindy.
Lui Joan ii place Renault-ul.
Iat cum se scriu aceste reguli n Prolog:
place(cindy, Ceva) if place(bill, Ceva).
place(joan, Ceva) if masina(Ceva).
ntrebriOdat ca am scris o serie de fapte, putem ncepe s punem ntrebri relativ la aceste fapte.
n limbajul natural am intreba:i place la Bill de Cindy ?
n sintaxa Prolog, vom scrie:place(bill, cindy).
La aceast ntrebare, Prolog va rspunde: Yes
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 locS 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.
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 generalen 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).
De la limbajul natural la programele Prolog
Clauze (fapte i reguli)Principial, n Prolog exist doar dou tipuri de fraze: fapte i reguli. Aceste fraze sunt cunoscute n Prolog sub numele de clauze.
FapteUn fapt reprezint o singur apariie fie a unei proprieti a unui obiect, fie a unei relaii ntre obiecte. Un fapt este de sine stttor; Prolog nu are nevoie s caute altceva pentru confirmarea unui fapt, si faptul poate fi folosit ca baz pentru inferene.
ReguliConstructorul din Prolog care descrie ceea ce se poate deduce din alte informaii este regula. O regul este o proprietate sau o relaie care se tie c este adevrat atunci cnd alte relaii sunt adevrate.
Exemple:
1. diana_poate_mnca(Mncare_de_pe_meniu) if
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, ntrebareaplace(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 variabileleAi 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
1 Solution
NotMecanismul 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.
ObservaieAceast 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 anonimeDac 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.
ComentariiComentariile 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 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 ).
PROLOG a fost inclus de Japonia ca limbaj de baz n planul de dezvoltare a sistemelor de generaia a cincea.
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 operareTurbo 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:
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
editarea fiierului curent: se selecteaz submeniul Edit (se apas Alt-E)
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
ieirea din mediu i revenirea n sistemul de operare: se apas Alt-X
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. PAGE 1