Prolog possível remoção de elementos em uma lista

Foi-me pedido que tentasse procurar todos os resultados possíveis, removendo qualquer número de qualquer elemento único de uma lista.

Por exemplo, se eu tiver uma lista X = [1,2,3]

remove(X, Y)

Meu resultado será:

Y = [2,3]
Y = [1,1,3]
Y = [1,3]
Y = [1,2,2]
Y = [1,2,1]
Y = [1,2]

Para isso, eu já escrevi duas soluções, mas realmente não sei quais são os contras das minhas soluções. Meu professor fica me dizendo que existe uma maneira melhor de fazer isso.

Minha primeira abordagem:

test(S1, S2):-
    length(S1, L),
    M is L -1,
    between(0, M, N),
    remove(S1, S2, N).
remove([H|T], [H2|T2], Heap):-
    (
        Heap>0->
        H2 = H,
        remove(T, T2, Heap-1);
        between(1, H, N),
        H2 is H - N,
        T2 = T
    ).

Minha segunda abordagem:

remove1([H|T], [H|TY]):-
    not(T=[]),
    remove1(T, TY).
remove1([H|T], S2):-
    between(1, H, X),
    HY is H - X,
    (   HY = 0-> S2 = T; S2=[HY|T]).

Ambas as abordagens estão dando o mesmo resultado, mas eu realmente quero saber como posso fazê-lo melhor. Alguém se importaria em me dar alguns conselhos, por favor?

questionAnswers(2)

yourAnswerToTheQuestion