Documente Academic
Documente Profesional
Documente Cultură
Recursivitate
Isabela Dramnesc
Intreb
ari din curs
Ce sunt variabilele anonime? Cand le folosim?
Ce ntelegeti prin unificare? Cum se produce unificarea?
Ce sunt structurile? Cum reprezentam:
c u r s ( datep ( nume ( a r d e l e a n ) , prenume ( i o n e l ) ) ,
d a t e c ( marti , c u r s n ( p l ) , s a l a ( a11 ) ) ) .
b i b l i o t e c a ( u n i v e r s i t a t e ( deVest ) ,
c a r t e ( p o e z i i , a u t o r ( mihai , eminescu ) ) ) .
De ce avem nevoie pentru a afla solutii pentru ntrebarile:
1. Cine are curs de pl (Programare Logica) marti n sala 102?
2. Ce c
arti g
asim la biblioteca universitatii din cluj?
Cum reprezent
am si cum interogam n Prolog:
1. 3X 2 + (7N/Z 2 ).
2. X 10 2X 4
Concepte
Trace
Domeniu inductiv
Recursivitate
Proceduri recursive
Conditie limit
a (de oprire)
Apel recursiv
Operatii recursive pe liste
Mapare recursiv
a
Comparare recursiva
Imbinare recursiv
a
1
Trace
Introduceti urm
atoarea baz
a de date:
vizitat ( ionel
v i z i t a t ( maria
v i z i t a t ( ioana
v i z i t a t ( ioana
, spania ) .
, spania ) .
, italia ).
, cehia ) .
calator ( ionel ).
c a l a t o r ( ioana ) .
calator ( victoria ).
c a l a t o r i e (X,Y): c a l a t o r (X) , v i z i t a t (X,Y ) .
Pentru fiecare din urm
atoarele interogari urmariti ce se ntampla cu ajutorul
comenzii trace :
? c a l a t o r i e ( i o n e l ,X ) .
? c a l a t o r i e ( maria ,X ) .
? c a l a t o r i e (N, s p a n i a ) .
? c a l a t o r i e (C, c e h i a ) .
? c a l a t o r i e (X,Y ) .
Inductie/Recursie
4.1
Domeniu inductiv
Este un domeniu compus din obiecte compuse care se pot descompune ntr-un
num
ar finit de obiecte mai simple. Se continua procedeul pana se ajunge la
cele mai simple obiecte.
Exemplu de domeniu inductiv:
[]
.(h, t)
4.2
/ l i s t a
/ l i s t a
t= t a i l
Coada
v i d a ; /
g e n e r i c a , unde h=head ( c a p u l ) ,
( coada ) l i s t e i .
l i s t e i t r e b u i e sa f i e o l i s t a . /
Proceduri recursive
O procedur
a recursiv
a const
a n:
Conditiile la limit
a (se trateaza cazul cand calculul se opreste, pe cele mai
simple obiecte).
Apelul recursiv se face doar pe argumente mai simple, n cazul nostru
apelul recursiv se face pe coada listei.
Exemplu: Predicatul care determina daca un anumit termen este lista sau
nu:
1)
e s t e l i s t a ( [ ] ) . / c o n d i t i a l a l i m i t a /
e s t e l i s t a ( [ H| T): e s t e l i s t a (T ) .
/ a p e l r e c u r s i v /
/ Cate s o l u t i i o b t i n p e n t r u i n t e r o g a r e a : /
? e s t e l i s t a (A ) .
Ordinea declar
arii clauzelor este foarte importanta:
Atentie la cazuri de genul:
2)
e s t e l i s t a ( [ H| T): e s t e l i s t a (T ) .
este lista ([]).
? e s t e l i s t a (X ) .
3)
p a r i n t e (X,Y): c o p i l (Y,X ) .
c o p i l (X,Y): p a r i n t e (Y,X ) .
4)
p e r s o a n a (X): p e r s o a n a (Y) , t a t a (Y,X ) .
persoana ( ion ) .
tata ( gabriel , ion ) .
?p e r s o a n a (X ) .
4.3
Exercitii:
5) Pentru exercitiul Scrieti un predicat schimba primele 2/2 (binar) care accept
a o list
a si genereaz
a o lista similara, numai cu primele doua elemente
schimbate (din tem
a) interogati n Prolog:
? schimba ( [ 1 , 2 , 3 , 4 ] ,X ) .
? schimba (X,Y) , schimba (Y,X ) .
Ce observati? Folositi comanda trace pentru a vedea ce se ntampla la ultima
interogare.
6) Predicatul pentru a vedea daca un element este membru al listei. Exemplu:
membru (X , [ X, ] ) .
membru (X , [ |Y] ) : membru (X,Y ) .
?membru ( 3 , [ 1 , 2 , 3 ] ) .
7) Exemplu pentru un predicat care elimina un element dintr-o lista.
e l i m i n a r e (X , [ X| T ] , T ) .
e l i m i n a r e (X , [ Y| T1 ] , [ Y| T2 ] ) : e l i m i n a r e (X, T1 , T2 ) .
Testati in Prolog toate posibilitatile!
8) Scrieti un predicat care calculeaza n! Stim ca 0! = 1.
Mapare recursiv
a
Mapare: fiind date 2 structuri similare sa se schimbe prima n a doua dupa niste
reguli date.
Exemplu: you are a computer se mapeaza n i am not a computer, do
you speak french se mapeaz
a n i do not speak german.
10)
change ( you , i ) .
change ( are , [ am, not ] ) .
change ( f r e n c h , german ) .
change ( do , no ) .
change (X,X ) .
alter ( [ ] , [ ] ) .
a l t e r ( [ H| T ] , [ X|Y] ) : change (H,X) , a l t e r (T,Y ) .
? a l t e r ( [ you , are , a , computer ] ,W) .
? a l t e r ( [ i , do , l i k e , you ] ,W) .
Tema:
Tema 3.
Termen de realizare: laboratorul urmator.