163
remove(X, [X | M], R) :- !, remove(X, M, R).
remove(X, [Y | L1], [Y | L2]) :- remove(X, L1, L2).
reverse([], []).
reverse([H|T], B) :-
reverse(T, S),
append(S, [H], B).
member(X, [X | Y]).
member(X, [Y|L]) :- member(X, L).
permutation(X, [H | T]) :-
append(V, [H|U], X),
append(V, U, W),
permutation(W, T).
permutation([], []).
permutation_dropping(S, Result) :-
subset(S, SSub),
permutation(SSub, Result).
subset([], []).
subset([Item | Items], [Item | Subset]) :-
subset(Items, Subset).
subset([Item | Items], Subset) :-
subset(Items, Subset).
remove(X, [X | M], R) :- !, remove(X, M, R).
remove(X, [Y | L1], [Y | L2]) :- remove(X, L1, L2).
reverse([], []).
reverse([H|T], B) :-
reverse(T, S),
append(S, [H], B).
member(X, [X | Y]).
member(X, [Y|L]) :- member(X, L).
permutation(X, [H | T]) :-
append(V, [H|U], X),
append(V, U, W),
permutation(W, T).
permutation([], []).
permutation_dropping(S, Result) :-
subset(S, SSub),
permutation(SSub, Result).
subset([], []).
subset([Item | Items], [Item | Subset]) :-
subset(Items, Subset).
subset([Item | Items], Subset) :-
subset(Items, Subset).