filter([],[]). filter([H|T],[H|PLUS]) :- H > 0,!, filter(T,PLUS). filter([H|T],PLUS) :- filter(T,PLUS). count(_,[],0). count(N,[N|T],C) :- count(N,T,C1), C is C1 + 1, !. count(N,[_|T],C) :- count(N,T,C). count(X,Y,N):-count(X,Y,N,0). (wersja ogonowa) count([],_,X,X):-!. count([H|X],[H|Y],N,M):- B is M+1, count(X,Y,N,B). count(X,[_|Y],N,M):- count(X,Y,N,M). exp(A, 0, 1). exp(A, P, R) :- P > 0, P1 is P - 1, exp(A, P1, S), R is S * A.
factorial(N, M) :- factorial(N, 1, M). factorial(0, A, A). factorial(N, A, M) :- N > 0, N1 is N - 1, A1 is A * N, factorial(N1, A1, M). concat_number(D, N) :- concat_number(D, 0, N). concat_number([], A, A). concat_number([H|T], A, R) :- A1 is A * 10 + H, concat_number(T, A1, R). decimal(N, M) :- N > 0, dec_(N, X), reverse(M, X). dec_(N, [N]) :- N is N mod 10. dec_(N, [H|T]) :- H is N mod 10, Nh is (N - H) / 10, dec_(Nh, T).
select_min([H|S],M,R):- select_min2([H|S],M,H), select(M,[H|S],R). select_min2([],M,M). select_min2([H|T],M,R):- H<R,!, select_min2(T,M,H). select_min2([_|T],M,R):- select_min2(T,M,R). sel_sort(X,Y):- sel_sort(X,Y,[]). sel_sort([],X,Y):- reverse(X,Y). sel_sort(X,Y,Z):- select_min(X,M,R), select(M,X,R), !, sel_sort(R,Y,[M|Z]).
insert([H|T],E,W):- E>H, select(H,W,W2),!, insert(T,E,W2). insert([],E,[E]). insert([H|T],E,W):- E=<H, W=[E,H|T]. ins_sort(L,W):- ins_sort(L,W,[]). ins_sort([],X,X). ins_sort([H|T],W,B):- insert(B,H,B2), ins_sort(T,W,B2).