====== Programowanie - Lista 3 (Lic.) ======
===== Zadanie 1. =====
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.
===== Zadanie 2. =====
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).
===== Zadanie 3. =====
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
===== Zadanie 4. =====
insert([H|T],E,W):-
E>H,
select(H,W,W2),!,
insert(T,E,W2).
insert([],E,[E]).
insert([H|T],E,W):-
E=