Вы должны использовать третий аргумент getPos (In, CurOut, Out) , а когда In пусто (например, [], вы объединяете CurOut с Out., Так что вы получаете
getPos(In, Out) :-
getPos(In, [], Out).
getPos([],L, L).
% getPos_1([], L).
getPos([Head|Tail], CurL, L):-
Head<0, getPos(Tail,CurL, L).
getPos([Head|Tail], CurL, L):-
Head>0, getPos(Tail, [Head|CurL], L).
Что вы делаете, если значение равно 0?
В SWI-Prolog вы можете использовать include/3
get_pos(In, Out) :-
include(>( 0), In, Out).
Если вы хотите использовать только 2 аргумента, вы можете написать
getPos1([], []).
getPos1([Head|Tail], L):-
Head<0, getPos1(Tail,L).
getPos1([Head|Tail], [Head|L]):-
Head>0,
getPos1(Tail, L).