Как сказано в комментарии, проблема в вашем утверждении if. Вы должны переписать вашу программу так:
sublist([],[]).
sublist([],[_|_]).
sublist([X|Xs],[X|Ys]):-
sublist(Xs,Ys).
sublist([X|Xs],[_|Ys]):-
sublist([X|Xs],Ys).
?- sublist(A,[a,b,c]).
A = []
A = [a]
A = [a, b]
A = [a, b, c]
A = [a, c]
A = [b]
A = [b, c]
A = [c]
Кстати, sublist/2
- это встроенный предикат в SWI. Вы можете посмотреть на эту реализацию (взято из здесь ):
sublist(L, L).
sublist(Sub, [H|T]) :-
sublist_(T, H, Sub).
sublist_(Sub, _, Sub).
sublist_([H|T], _, Sub) :-
sublist_(T, H, Sub).
sublist_([H|T], X, [X|Sub]) :-
sublist_(T, H, Sub).