Prolog posible eliminación de elementos en una lista

Se me ha pedido que intente buscar todos los resultados posibles, eliminando cualquier número de cualquier elemento individual de una lista.

Por ejemplo, si tengo una lista X = [1,2,3]

remove(X, Y)

Mi resultado será:

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

Para esto, ya he escrito 2 soluciones, pero realmente no sé cuáles son las desventajas de mis soluciones. Mi profesor sigue diciéndome que hay una mejor manera de hacerlo.

Mi primer acercamiento:

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
    ).

Mi segundo enfoque:

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]).

Ambos enfoques están dando el mismo resultado, pero realmente quiero saber cómo puedo hacerlo mejor. ¿Alguien le importaría darme algún consejo por favor?

Respuestas a la pregunta(2)

Su respuesta a la pregunta