% List permutor example %:-module listpermutor. %:-public listPermutor/2, listPermute/2. %:-public test_perm. listSelector(S,List):- assignable(S, list(List,[])). listSelect(S,E,Rest1):- S=>list([E|Rest],Rest0),!, S<+list(Rest,[E|Rest0]), append(Rest0,Rest,Rest1). % not so smart yet append([A|L],E,[A|R]):-!,append(L,E,R). append([],E,E). listPermutor(P,List):- listSelector(S,List), listSelect(S,E,Rest), listPermutor(R,Rest), !, assignable(P, perm(S,E,R)). listPermutor(P,[]):- assignable(P, []) . listPermute(P,[E|Perm]):- P=>perm(_,E,R), listPermute(R,Perm),!. listPermute(P,[]):- P => [],!, P <+ end. listPermute(P,Perm):- P=>perm(S,_,_), listSelect(S,E,Rest), listPermutor(R,Rest),!, P<+perm(S,E,R), listPermute(P,Perm). test_perm:- listPermutor(P,[a,b,c]), listPermute(P,L1), write(L1),nl, listPermute(P,L2), write(L2),nl, listPermute(P,L3), write(L3),nl, listPermute(P,L4), write(L4),nl, listPermute(P,L5), write(L5),nl, listPermute(P,L6), write(L6),nl, listPermute(P,L7), % fails write(L7),nl.