% perm(X, Y) is true iff X is a permutation of Y. perm([], []). perm([X | L1], L2) :- member(X, L2), delete(X, L2, NewL2), perm(L1, NewL2). % member(X, Y) is true iff X is an element of list Y. member(X, [X | _]). member(X, [_ | L]) :- member(X, L). % delete(X, Y, Z) is true iff Z is the list by deleting the first occurance of X from Y. delete(X, [X | L], L). delete(X, [Y | L], [Y | L2]) :- delete(X, L, L2).