Lab 2 Prolog

Preview:

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

Recommended