permute([],[]). permute([X|L],P) :- permute(L, L1), insert(X,L1,P). del(Item, [Item|List], List). del(Item, [First|List], [First|List1]) :- del(Item, List, List1). insert(X,List, BiggerList) :- del(X, BiggerList, List).