||?-perm([1,2,3],X). perm([],[]). perm(Xs, [Z | Zs]) :- select(Z, Xs, Ys), perm(Ys, Zs). select([],[],[]):- fail. select(A,[A|L1],L1). select(X,[A|L1],[A|L2]):- select(X,L1,L2). %X = [1,2,3]; %X = [1,3,2]; %X = [2,1,3]; %X = [2,3,1]; %X = [3,1,2]; %X = [3,2,1];