Sunteți pe pagina 1din 4

Structura unui program prolog

domains aici se definesc tipurile de date


s=symbol
i=integer
predicates
dictionar(s,s,i)
clauses
dictionar(unu,one,1).
dictionar(una,one,1).
dictionar(doi,two,2).
dictionar(doua,two,2).
dictionar(trei,three,3).
dictionar(patru,four,4).
dictionar(cinci,five,5).
Goal: dictionar(unu,one,1) -> YES
Goal: dictionar(unu,one,X) -> X=1
Goal:dictionar(X,two,2) -> X=doi, X=doua
F8 se repeat intrebarea precedent
Compartimentul domains este pentru definirea tipurilor de date, forma
generala: d1,d2dn=tip standard.
Daca domains sint declarate globale, atunci continutul lor pot fi accesibile
si in alte programe,incluzind in aceste programe directiva include urmat de
numele fisierului unde sunt acestea.
In compartimentul predicates se declara predicatele: numele lor, aritatea,
tipul fiecarui argument.
Compartimentul clauses baza de cunostinte: descrierile tuturor faptelor si
regulilor , fiecare fiind terminate cu semnul punct.
Compartimentul goal poate sa contina o singura interogare, un scop, sau
o conjunctie de scopuri terminate cu punct.
11.02.2016
If :,

and

; or
nl din rind nou
Clauzele au forma T:-Q1,Q2,,Qn (1)

T este capul clauzei si este un literal pozitiv. Q1,Q2,,Qn formeaza corpul


clauzei si sint literali negative. Daca {Q1,Q2,,Qn}=O(multime vida) si T!
=multime vida atunci clauza (1) este afirmatie conditionata(este regula).
Daca Q1,Q2,,Qn=multime vida si T!= multime vida, atunci clauza 1 este un
fapt. Daca Q1,Q2,,Qn sunt diferiti de multimea vida si T=multime vida
atunci clauza (1) este intrebare.

Fapte
Un fapt este un adevar neconditionat si specifica o afirmatie despre o
anumita relatie. Relatiile pot fi unare, binare. Forma generala este:
nume_predicat(arg1,arg2,,argn), n>=1.
Numele unui predicat este un identificator care incepe cu o litera mica,
argumentele sunt constant. Faptul este urmat de punct.

Reguli sint afirmatii, adevarul carora este determinat de catre adevarul


mai multor factori. Regulile sint niste rationamente. Forma generala a
regulilor este:
nume_predicat(arg1,arg2,,argm):- nume_predicat1(arg1,arg2,,argn),
nume_predicat2(arg1,arg2,
,argn),
.......................................................
..
nume_predicatM(argm1,argm2,
,argmn)
Numarul argumentelor din paranteze poate fi si null. In acest caz parantezele
se omit. Predicatele pot contine variabile.

Interogari dupa ce sau declarat faptele si regulile, poate fi declarat si


scopul. Cee ace se cauta, in prolog se numeste goal. Scopul determina daca
are loc o anumita relatie dintre obiecte. Forma unui goal coincide cu forma
corpului unei reguli. Un goal poate fi exterior sau interior.
Exemplu:
domains
person,thing=symbol
predicates
likes(person,thing)
clauses
likes(Ion,camera).
likes(Dragos,computer).
likes(Kathy,computer).

goal
write(Ce-i place lui Ion),
nl,likes(Ion,X),
write(Lui Ion ii place,X).
Exemplu:
domains
date=birthday(integer,integer,integer)
predicates
student(symbol,date)
clauses
student(Cozmic,birthday(08,08,1993)).
student(Romanciuc,birthday(07,07,1994)).
goal
student(Cozmic,X), write(Date of birth: ,X).
goal
student(Cozmic,birthday(_,_,Y)), write(Anul de nastere al studentului
este: ,Y).
Exemplu:
domains
thing=misc_thing(rock);
book(author,title)
rock,author,title,person=symbol
predicates
owns(person,thing)
clauses
owns(Andrei,misc_thing(Piano)).
owns(Andrei,book(ICreanga,Amintiri din copilarie)).
Goal:
owns(Andrei,X).

Predicate aritmetice
Operatorii aritmetici sint: + , - , * , / , div , mod. Ordinea efectuarii
operatiilor este cea clasica. Operanzii pot fi numere sau variabile. Expresia
poate fi calculata daca toate variabilele ce apar in ea sint legate. In Prolog se
utilizeaza functiile:
1. X mod Y

2. X div Y
3. round(X)
4. trunc(X)
5. abs(X)
6. cos(x)
7. sin(X)
8. tan(X)
9. arctan(X)
10. exp(X)
11. ln(X)
12. sqrt(X)
13. random(X)
Operatorii relationali sint:
<, <=, >, >=, =, <>
Operatorul =(egal) este utilizat nu numai ca operator relational dar si ca
operator de atribuire.
Exemplu:
domains
n=integer
predicates
add(n,n)
sub(n,n)
multi(n,n)
div(n,n)
clauses
add(X,Y):-T=X+Y,write(X,+,Y,=T),nl
sub(X,Y):-S=X-Y,write(X,-,Y,=,S),nl
division(X,Y):-Y<>0, R=X/Y, write(X,/,Y,=,R).

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