1 2 3 4 5 6 7 8 9 10
% negowanie odciciem (!) diffset([], S2, []). diffset(S1, S2, W) :- [H|T] = S1, member(H, S2), !, diffset(T, S2, W). diffset(S1, S2, W) :- [H|T] = S1, diffset(T, S2, W2), W = [H|W2]. subsum([], 0, []). subsum(L, S, W) :- [H|T] = L, subsum(T, S, W). subsum(L, S, W) :- [H|T] = L, S2 is S - H, subsum(T, S2, W2), W = [H|W2]. inserts([], X, []). inserts(L, X, W) :- [H|T] = L, H =< X, inserts(T, X, W1), W = [H|W1]. inserts(L, X, W) :- [H|T] = L, H > X, T1 = [H|T], W = [X|T1].