Documente Academic
Documente Profesional
Documente Cultură
Append
Regula: 1).append([],L,L):-!. daca lista este vida rezultatul este a 2-a lista
2). Append([E|L1],L2,[E|R]):-append(L1,L2,R)
Prima regula specifica faptul ca o lista vida concatenata la o lista este ea
insasi. Aceasta regula este conditia de finalizare a recursiei.
A 2-a regula extrage cite un element din prima lista si il trece la lista
rezultat. Alipirea lui E la R nu are loc pina cind R nu va fi concretizat. Deci
initial elementul E se pune in stiva si se preia atunci cind R va fi concretizat
de catre prima regula.
Goal: append([a,b,c],L,[a,b,c,d,e,f]) -> L=[d,e,f]
Aflarea ultimului element din lista:
ultim_el(X,[R]): X=R.
ultim_el(X,[_|Y]): ultim_el(X,Y).
goal: ultim_el(X,[a,b,c,d]);
ultim_el(_,b,c,d)
ultim_el(_c,d)
ultim_el(_,d) ->R=d
Eliminarea unui element din lista:
del(X,[X|L],L): !.
del(X,[Y|L],[Y|L1]): del(X,L,L1).
elim_el(X,[],[]):-!
elim_el(X,[X|L],R):-elim_el(X,L,R)
elim_el(X,[Y|L],[Y|R]):-X<>Y,elim_el(X,L,R)
P([],[]):-!.
P([X],[X]):-!.
P([X,Y|L1],[Y,X|L2]):-P(L1,L2)
Sa se mareasca(inmultire) elementele listei cu 2 daca este integer,
daca este symbol sa se dubleze (aa,bb,cc)
P([],[]).
P([X|L1],[Y|L2]):-Y=X*2,P(L1,L2)
dublu([],[]).
dublu([X|L1],[X,X|L2]):-dublu(L1,L2)
Sa se mareasca elementele listei cu o unitate
P([],[]).
P([X|L1],[Y|L2]):-Y=X+1,P(L1,L2)
17.03.2016
Sa se scrie un predicat care ar calcula numarul elementelor
divizibile cu 3 dintr-o lista data
predicates
div_3(integer*,integer)
clauses
div_3([],0):-!
div_3([X|L],R):-X mod 3=0,div_3(L,N1),R=N1+1.
div_3([X|L],R):-X mod 3<>0,div_3(L,R).
Sa se scrie un predicat ce ar calcula suma numerelor divizibile cu 5
dintr-o lista data
p5([],0):-!.
p5([X|L],R):-X mod 5=0,p5(L,N1),R=N1+X.
p5([X|L],R):-X mod 5<>0,p5(L,R).
Sa se scrie un predicat ce ar calcula suma nr pare dintr-o lista data
suma([],0):-!.
suma([X|L],R):-X mod 2=0,suma(L,N1),R=N1+X.
suma([X|L],R):-X mod 2<>0,suma(L,R).
Sa se scrie un predicat ce ar calcula suma nr impare dintr-o lista
data
suma([],0):-!.
suma([X|L],R):-X mod 2=1,suma(L,N1),R=N1+X.
suma([X|L],R):-X mod 2=0,suma(L,R).
Sa se scrie predicatul ce ar adauga elementele negative intr-o lista
suma([],[]):-!.
suma([X|L],[X|R]):-X<0,suma(L,R).
suma([X|L],R):-X>=0,suma(L,R).
Sa se scrie un predicat ce ar elimina elementele listei divizibile la 5
elim([],[]):-!.
elim([X|L],[X|R]):-X mod 5<>0,elim(L,R).
elim([X|L],R):-X mod 5=0,elim(L,R).