Sunteți pe pagina 1din 14

Inteligen Artificial

Limbajul Prolog
Cap. 2

Aspectul declarativ al
programelor Prolog

Operaia principal: UNIFICAREA


Doi termeni S i T ai limbajului sunt unifiabili dac:
cei doi termeni sunt identici, ST;
substituia astfel nct ST.
Exemplu:
T = data(Ziua, aprilie, A);
S = data(Z, Luna, 2001);
= {Ziua = 1, Z=1, Luna=aprilie, A=2001}.
ST = data(1, aprilie, 2001).

Aspectul declarativ al
programelor Prolog
Regulile conform crora doi termeni sunt unifiabili

1)dac S i T reprezint dou constante, atunci acestea sunt unifiabile


numai dac sunt identice;

2)dac unul din termeni este o variabil liber, atunci aceasta poate fi
unificat cu orice termen (simplu sau compus);

3)dac ambii termeni sunt variabile libere, unificarea se realizeaz


prin legarea celor dou variabile. Orice instaniere a uneia dintre
variabile atrage dup sine i instanierea celeilalteia cu aceeai
valoare.

4)doi termeni compui sunt unifiabili dac sunt ndeplinite


urmtoarele condiii:

au acelai functor i aceeai aritate;

argumentele de pe poziiile corespunztoare sunt unifiabile ntre ele.

Aspectul procedural al
programelor Prolog
Program
PROLOGP

Goal

Interpretor
PROLOG
Inference engine

Indicator=yes+substituiaQ
astfelnctPQ(dac Q conine variabile)

Indicator=no(Q nu este o consecin logic sau nu este


deductibil din P)
P/Q.

Formule de interogare

determinist: nu conine variabile libere,


rspunsul sistemului la o astfel de formul fiind
yes sau no, dup cum formula respectiv este
sau nu o consecin logic a clauzelor din
program;

nedeterminist:
conine una sau mai multe
variabile libere, sistemul determinnd prin
backtracking toate instanierile posibile ale
variabilelor pentru care respectiva formul este
o consecin logic a clauzelor din program.

Formule de interogare

Exemplu

-?: fata(Cine, Cui). % (o,o)


-?: fata(Cine, ion). % (o,i)
Cine=maria
-?: fata(maria, Cui). % (i,o) Cui=ion
-?: fata(maria, ion). % (i,i) yes

Caracteristici Prolog

Singura modalitate de instaniere a


unei variabile este procedura de
unificare (programatorul nu poate
atribui o valoare unei anumite
variabile).

Variabilele pot fi eliberate numai prin


mecanismul de backtracking al
interpretorului Prolog.

Exemplu

saraca(ioana). bogata(veta).
fata(ionela, ioana). fata(maria, veta).
harnica(ionela). harnica(maria).
frumoasa(ionela). frumoasa(maria).
are_zestre(X) :- fata(X, Y), bogata(Y).
place(ion,
X)
:are_zestre(X),
frumoasa(X).

-? place(ion, Cine).

Prelucrarea listelor

1. Membru al unei liste


member(X,L), X element, L list.
member(X, [X|_]).
member(X, [_|T]):- member(X, T).
-?: member(b, [a, b,c]). %(i, i) yes
-?: member(X, [a, b,c]). %(o, i) X=a;
X=b; X=c.

Prelucrarea listelor

Concatenarea a dou liste


concat(L1, L2, L), (i,i,o)

concat([], L, L).
concat([H|T], L2, [H|T2]):- concat(T, L2, T2).

-?: concat([a,b], [c,d],L).

Prelucrarea listelor

Numrarea elementelor unei liste


count(L, N)

count([], 0).
count([H|T],
M+1.

N):-

count(T,M),

-?: count([1,2,3], Cate).

is

Operatori

de unificare

de comparaie lexicografic

t1=t2
a+b==a+b => yes.
a+b\==b+a => yes.

de evaluare

X=1+2 => X se instaniaz cu 1+2


X is 1+2 => X se instaniaz cu 3

Operatori

Relaionali (comparaia
numeric a dou expresii )

E1=:=E2
E1=\=E2
E1<E2
E1=<E2
E1>E2
E1>=E2

egalitate
neegalitate
mai mic
mai mic sau egal
mai mare
mai mare sau egal

Structuri iterative

CAF :- p(X), C(X), !. % Cut and fail

stat(europa, romania, bucuresti).


stat(europa, albania, tirana).
stat(africa, maroc, rabat).
stat(africa, egipt, cairo).
stat(asia, thailanda, bangkok).
caf :- stat(africa, X, _), write(X), nl, X=egipt, !.

BAF % Backtraking after fail

baf :- (stat(europa, _, Capitala), write(Capitala), nl, fail);


true.

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