Prolog mögliche Entfernung von Elementen in einer Liste

ch wurde gebeten zu versuchen, nach allen möglichen Ergebnissen zu suchen, indem ich Zahlen aus einzelnen Elementen aus einer Liste entfern

Zum Beispiel, wenn ich eine Liste habe X = [1,2,3]

remove(X, Y)

Mein Ergebnis wird sein:

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

Für dieses habe ich bereits 2 Lösungen geschrieben, aber ich weiß nicht wirklich, was die Nachteile meiner Lösungen sind. Mein Professor sagt mir immer wieder, dass es einen besseren Weg gibt, dies zu tun.

Mein erster Ansatz:

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

Mein zweiter Ansatz:

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

Beide Ansätze liefern das gleiche Ergebnis, aber ich möchte wirklich wissen, wie ich es besser machen kann. Würde es jemandem etwas ausmachen, mir einen Rat zu geben?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage