Sunteți pe pagina 1din 3

Prelucrari de obiecte.

Liste
O lista este un ansamblu de obiecte de acelasi tip. Numarul de obiecte al
unei liste nu este definit. Elementele pot fi obiecte compuse. Se poate
declara o lista de liste. Elementele unei liste se separa prin virgule, tot
ansamblul se ia in paranteze patrate.
Definitie: Se numeste lista o consecutivitate omogena ordonata de
elemente.
[1,2,3,4,5] lista de intregi
[[1,2],[3,4,5]] lista de liste de intregi
[] lista vida
Tipurile de liste sunt declarate in sectiunea domains.
Exemplu:
domains
nume_dom=real
lista=nume_dom*
llista=lista*
unde lista este tipul listei si specifica o lista de numere reale, iar llista
specifica o lista de liste.
i=integer
li=i* - lista de integer
sau
li=integer*
s=symbol
ls=s* -- lista de simboluri
Primul element al unei liste se numeste capul listei, iar restul elementelor
formeaza coada listei. Coada listei la rindul sau este tot de tip lista. Pentru a
separa capul listei de coada se utilizeaza simbolul | .
Exemple:
[1,2,3,4,5]
[[1,2],[3,4,5]]
[ion,ana,maria]
[1.2]
[]
[[a,b,c],[x,y],[n,m,k]]
[[3,2],[4,6]]

Cap: 1; Coada: [2,3,4,5]


Cap: [1,2] ; Coada:[3,4,5]
Cap: ion ; Coada:[ana,maria]
[]
Cap: nedefinit; Coada:nedefinit

In procesul de unificare, o variabila poate fi constituita ca o lista sau un


element al listei.
Lista1

Lista2

Unificare

[a,b,c]

[X,Y,Z]

X=a, Y=b, Z=c

[X|Y]

[5,4,3]

X=5, Y=[4,3]

[x,y,z,v]

[A,B|C]

A=x,B=y,C=[z,v]

[3|X]

[2,1]

nu se unifica

[a|L1]

[Y|[b]]

Y=a,L1=[b]

[1,2,3,4]

[X,Y|_]

X=1,Y=2

Exemple de interpretari ale listelor:


Lista
[X|Y]

[X,Y,Z]

[_|_]

[X|[Y|[Z|[]]]]

liste de 3 elemente

[X|_]
[_|Y]
Toate listele
nevide
Lista de 1 element : [1], [X], [X|[]], [_]
Lista de cel putin 4 elemente: [a,_,_,b]
Lista cu cel putin 2 elemente: [X,Y|_]

Procesarea listelor
Schema recursiva de prelucrare a listelor:
P([]).
P([Cap|Coada]):-prelucrare(Cap),P(Coada).
Sint multe conditii de stopare al recursiei la procesarea listelor:
a). Atingerea listei vide;
b). Gasirea elementului cautat;
c). Capul listei indeplineste sau nu indeplineste o careva conditie stabilita;
d). Lista intreaga indeplineste careva conditii etc
Predicate de procesare al listelor:
1). Afisarea listei: afisare([]).
afisare([X|R]):-write(X),nl,afisare(R).
Goal:
-?afisare([a,b,c,d]) --> a b c d
2). Lungimea unei liste:
lungime([],0) /* conditie limita-> sirul vid,adica valoare 0
lungime([_|L],N):-lungime(L,N1),N=N1+1
Goal:
?lungime([1,2,3,7,13],N) ->N=5

3). Suma unei liste:


suma([],0) limita
suma([X|S],N):-suma(S,N1),N=N1+X
4). Apartenenta unui element la o lista
member(X,[X|_])
member(X,[_|Y]):-member(X,Y)
Goal: member(b,[a,b,c]) -> yes (b apartine listei)
member(X,[a,b,c]) ->X=a,X=b,X=c
Daca X este concretizat si X este un element al unei liste Y atunci
member(X,Y) este adevarat, in caz contrar este fals. Daca X nu este
determinat si scopul este determinist, atunci X se concretizeaza cu primul
element al listei Y. In cazul nondeterminismului, X se concretizeaza pe rind cu
toate elementele din Y.

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