
%%% FCP Ex. 2.4 %%%

:-lib(ic).


%%%%%%% 2.4 a) %%%%

member(X,[X|T],T).
member(X,[H|T],[H|R]) :- member(X,T,R).


perm([],[]).
perm([H|T],[E|RPerm]) :- samelength(T,RPerm), perm(RL,RPerm), member(E,[H|T],RL).


samelength([],[]).
samelength([_|T1],[_|T2]) :- samelength(T1,T2).


%%%%%%% 2.4 b) %%%%

sorted([]).
sorted([_]).
sorted([X,Y|R]):- X#=<Y, sorted([Y|R]).

permsort(L,SL) :- perm(L,SL), sorted(SL).


%%%%%%% 2.4 c) %%%%

permsort2(L,SL) :- samelength(L,SL), sorted(SL), perm(L,SL).

