It’s not actually using select/3:
Code is hiding here, waiting to be clicked...
subset_sum(0, _, []).
subset_sum(Sum, SourceLst, [Elem|SumLst]) :-
select_after(Elem, SourceLst, After),
Sum0 is Sum - Elem,
compare(Comp, Sum0, 0),
subset_sum_(Comp, Sum0, After, SumLst).
subset_sum_(=, 0, _, []).
subset_sum_(>, Sum1, SourceLst, SumLst) :-
subset_sum(Sum1, SourceLst, SumLst).
select_after(Elem, [H|T], After) :-
select_after_(T, H, Elem, After).
select_after_(T, H, H, T).
select_after_([H|T], _, E, R) :-
select_after_(T, H, E, R).
Results:
?- subset_sum(7, [10,7,3,4,2,1], L).
L = [7] ;
L = [3, 4] ;
L = [4, 2, 1] ;
false.
?- subset_sum(0, [10,7,3,4,2,1], L).
L = [] ;
false.
Note the tweaked argument order.