Sunteți pe pagina 1din 27

INTELIGENTA ARTIFICIALA

Laborator 2

VISUAL PROLOG

versiunea 7.2 download: http://www.visual- prolog.com/vip6/download/

mediu de programare complet, bazat pe limbajul de programare Prolog contine tot ce este necesar pentru implementarea aplicatiilor: mediu grafic de dezvoltare, compilator, linkeditor si depanator include o biblioteca ce ofera acces la API, punand la dispozitia programatorului instrumente pentru: interfata utilizator grafica, baze de date ODBC/OCI, precum si Internet (socket, ftp, http, cgi etc.).

ENTITATILE
Un program Prolog contine urmatoarele entitati:

fapte despre obiecte si relatiile existente intre aceste obiecte reguli despre obiecte si relatiile dintre ele, care permit deducerea (inferarea) de noi fapte pe baza celor cunoscute intrebari (interogari), numite si scopuri, despre obiecte si relatiile dintre ele, la care programul raspunde pe baza faptelor si regulilor existente

FAPTE
sunt predicate de ordinul intai de aritate n considerate adevarate aritate = nr de argumente stabilesc relatii intre obiectele universului problemei faptele sunt relatii sau proprietti pe care programatorul le cunoaste ca fiind adevrate.

Ferdinand este tatal lui Carol al II-lea. tata(Carol al II-lea, Ferdinand)

REGULI
O regula Prolog exprima un fapt care depinde de alte fapte si este de forma: S :- S1, S2, Sn. Si, i = 1,n si S au forma faptelor Prolog S, care defineste regula, se numeste antet de regula S1, S2, Sn formeaza corpul regulii si reprezinta conjunctia de scopuri care trebuie satisfacute pentru ca antetul regulii sa fie satisfacut :- = if , = and ; = or

REGULI

Cu un formalism asemanator celui de la fapte putem sa extindem stadiul relatiilor si sa stabilim reguli dupa cum urmeaza:

X este bunicul lui Z, daca X este tatal lui Y si Y este tatal lui Z.

bunic(Persoana, Bunic) :tata(Persoana, Tata), tata(Tata, Bunic)

BAZA DE CUNOSTINTE

FAPTE + REGULI = BAZA DE CUNOSTINTE

SCOPURI

Obtinerea consecintelor sau a rezultatului unui program Prolog se face prin fixarea unor scopuri care pot fi adevarate sau false, in functie de continutul bazei de cunostinte Prolog. Scopurile sunt predicate pentru care se doreste aflarea valorii de adevar in contextul faptelor existente in baza de cunostinte. Scopurile pot fi vazute ca intrebari, deci rezultatul unui program Prolog este raspunsul la o intrebare (sau la o conjunctie de intrebari). Acest raspuns poate fi afirmativ, yes, sau negativ, no. In cazul unui raspuns afirmativ la o intrebare, poate furniza si alte informatii din baza de cunostinte.

VARIABILE

argumentele faptelor si intrebarilor pot fi: obiecte particulare, numite si constante sau atomi simbolici obiecte generice numite variabile numele argumentelor variabile incepe cu litera mare (sau cu liniuta de subliniere) constantele simbolice incepe cu litera mica variabilele Prolog sunt locale => daca doua clauze contin
fiecare cate o variabila numita X, atunci vor exista, de fapt, doua variabile distincte X

variabila anonima _ se poate utiliza in locul oricarei alte variabile. Diferena dintre o variabila anonima si o variabila obisnuita este aceea ca o variabila anonima nu va primi niciodata valoare.

STRUCTURA UNUI PROGRAM

Un program Prolog contine urmatoarele sectiuni:

domains predicates goal clauses constants databases

Nu toate sectiunile sunt obligatorii.

CLAUSES
Clauses contine fapte si reguli argumentele unei clauze sunt in ordine bine definita incepe cu cuvantul cheie CLAUSES atat faptele, cat si regulile trebuie sa se termine cu punct (.) "Popescu lucreaza la biroul aprovizionare"

lucreaza('Popescu', biroul_aprovizionare).

PREDICATES
contine fiecare predicat ce apare citat in clauze si precizeaza tipul argumentelor este un fel de catalog al tuturor predicatelor utilizate (ca un fel de sectiune a declaratiilor de functii in C) Fiecare predicat apelat in clauze trebuie sa respecte numele si argumentele unui predicat descris in predicates! Exemplu:

masc(symbol)

DOMAINS
In sectiunea domains se poate realiza redenumirea unor domenii standard pentru a le da o semantica mai precisa, precum si declararea unor noi structuri de date. Exemple:

copil = symbol masina = symbol varsta = integer

DATABASES

reprezinta o sectiune speciala pentru declararea unor fapte care se doresc a fi o parte a unei baze de date dinamice

uneori este necesara actualizarea faptelor din program (modificare, stergere, adaugare) in timpul rularii programului -> faptele constituie o baza de date dinamica sau interna.

GOAL
Dupa ce s-au furnizat cateva fapte i reguli unui program Prolog, acestuia i se pot pune intrebari, numite interogari. Acestea sunt plasate in sectiunea goal Prolog va incerca intotdeauna sa raspunda la o interogare prin cercetarea faptelor cautand de la inceput spre sfarsit.

GOAL

Este Ferdinand tatal Elizabetei? Cine este tatal lui Mihai? Este Ferdinand bunicul lui Mihai?

tata(Elizabeta, Ferdinand). tata(Mihai, X).

bunic(Mihai, Ferdinand).

CONSTANTS
permite declararea unor constante (constante simbolice). sectiunea poate sa apara oriunde in program, cu conditia sa fie declarata constanta inainte de utilizarea ei. constanta e vizibila in toate clauzele, dar valoarea constantei nu se poate modifica in timpul executiei programului. Forma generala:

constants nume _constanta=valoare

CAUTAREA SOLUTIEI
Sistemul mentine un scop curent, care este mereu tratat de la stanga la dreapta. Exemplu: bunic(X, Y), mama(Y, Z).

Sistemul va incerca sa rezolve subscopul bunic(X, Y) inainte sa rezolve mama(Y, Z). Daca primul subscop nu poate fi rezolvat, nu are cum sa existe solutie la intregul scop ca atare cel de-al doilea subscop nici nu este abordat. Cand se rezolva un subscop particular, faptele si regulile sunt tratate de sus in jos.

CATE PATRATE SUNT?

EXEMPLU
parinte(pam, bob). parinte(tom, bob). parinte(tom, liz). parinte(bob, ann). parinte(bob, pat). parinte(pat, jim).

CATEVA INTEROGARI

Este Bob parinte al lui Pat?

parinte(bob, pat).
parinte(X, liz). parinte (bob, X). parinte(X, Y).

Cine este parintele lui Liz?

Cine sunt copiii lui Bob?

Cine este parinte al cui?

Cine este un bunic al lui Jim?


(1) Cine este parinte al lui Jim? ->Y (2) Cine este parinte al lui Y? -> X parinte(Y, jim), parinte(X, Y).

ALTE FAPTE
feminin(pam). masculin(tom). masculin(bob). feminin(liz). feminin(pat). feminin(ann). masculin(jim). sex(pam, feminin). sex(tom, masculin). sex(bob, masculin). urmas(liz, tom).

Pentru toti X si toti Y, Y este urmas al lui X daca X este parinte al lui Y.

urmas(Y, X) :-

parinte(X, Y).

CUM LUCREAZA PROLOG ACUM?


urmas(liz, tom)

variabilele X si Y vor fi instantiate:

X = tom si Y = liz

urmas(liz, tom) :- parinte(tom, liz).

ALTE RELATII

relatia mama, definita astfel: mama (X, Y) :- parinte (X,Y), feminin (X). relatia bunic, definita astfel: bunic (X, Z) :- parinte (X, Y), parinte(Y, Z).

relatia sora, definita astfel: sora (X, Y) :parinte (Z, X), parinte (Z, Y), feminin (X).

INCA 2 INTEROGARI

ann si pat sunt surori?

sora (ann, pat).

cine este sora lui Pat?

sora (X, pat).

S-ar putea să vă placă și