Professional Documents
Culture Documents
Prolog v1
Prolog v1
nrSimetrice(0):-write(0),tab(2).
nrSimetrice(N):-simetric(N),N1 is N-1,nrSimetrice(N1),write(N),tab(2).
nrSimetrice(N):-N1 is N-1, nrSimetrice(N1).
%verificare simetrie
simetric(N):-imparte(N,L1),invers(L1,L2), L1=L2.
%impartirea unui numar in elementele unei liste(in ordine inversa)
imparte(0,[]):-!.
imparte(N,[N2|L]):-N1 is floor(N/10), N2 is N mod 10, imparte(N1,L).
%inversarea unei liste
invers(L, Linv):- inv(L, [], Linv).
inv([], L, L).
inv([X|Rest], Temp, L) :- inv(Rest, [X|Temp], L).
?-nrSimetrice(20).
0 1 2 3 4 5 6 7 8 9 11
?-reuniune([1,2,3],[3,4,5],Reuniune).
Reuniune=[1,2,3,4,5].
?-intersectie([1,2,3],[3,4,5],Intersectie).
Intersectie=[3].
?-diferenta([1,2,3],[3,4,5],Diferenta).
Diferenta=[1,2]
?-ordonata([1,7,9]).
True
?-ordonata([1,8,4]).
False
-
?-consec([1,2,3]).
True
?-consec([1,7,9]).
False
?-stergPozI([1,2,3,4,5],2,L).
L=[1,3,4,5].
?-stergInainteElement([1,2,3],2,L).
L=[2,3]
?-stergInainteElement([1,2,3],1,L).
L=[1,2,3]
?-stergDupaElement([1,2,3],2,L).
L=[1,2]
?-stergDupaElement([1,2,3],3,L).
L=[1,2,3]
?-adaugaDupaPozI([1,2,3,4],7,3,L).
L=[1,2,3,7,4]
-
%adaugarea unui element pe pozitia i
adaugaPePozI([P|Rest],X,1,[X,P|Rest]).
adaugaPePozI([P|Rest],X,I,[P|Rest1]):-I1 is I-1, adaugaPePozI(Rest,X,I1,Rest1).
?-adaugaPePozI([1,2,3,4],7,3,L).
L=[1,2,7,3,4]
?-adaugaDupaElement([1,2,3,4],3,7,L).
L=[1,2,3,7,4]
?-adaugaInainteElement([1,2,3,4],3,7,L).
L=[1,2,7,3,4]