domains x = integer l = integer* predicates concatenate(l,l,l) delete(x,l,l) insert(x,l,l) permutation(l,l) clauses concatenate([],L,L). concatenate([X|L1],L2,[X|L3]) :- concatenate(L1,L2,L3). delete(X,L,L1) :- concatenate(L3,[X|L2],L), concatenate(L3,L2,L1). insert(X,L1,L) :- delete(X,L,L1). permutation([X],[X]). permutation([X|T],L) :- permutation(T,T1), insert(X,T1,L).