permutation([],[]). permutation([X | Xs],[Z | Zs]) :- select(Z,[X | Xs],Ys),permutation(Ys,Zs). select(X,[X | Xs],Xs). select(Y,[X | Xs],[X | Ys]) :- select(Y,Xs,Ys). anagrammi(X) :- string_to_list(X,L),iterapermutazione(L,P). iterapermutazione(L,P) :- permutation(L,P),scrivi(P),fail. iterapermutazione(X,Y). scrivi(P) :- name(Str,P),writeln(Str),!.