home *** CD-ROM | disk | FTP | other *** search
- all_permutations([],[[]]).
- all_permutations([X|Xs],Perms2):-
- all_permutations(Xs,Perms1),
- extend_permutations(Perms1,X,Perms2).
-
- extend_permutations([],_,[]).
- extend_permutations([Perm|Perms1],X,[[X|Perm]|Perms3]):-
- extend_permutations(Perms1,X,Perms2),
- insert_item(Perm,X,[],Perms2,Perms3).
-
- insert_item([],_,_,Perms,Perms).
- insert_item([Y|Ys],X,Acc,Perms1,[Zs|Perms2]):-
- reverse_and_append(Acc,[Y,X|Ys],Zs),
- insert_item(Ys,X,[Y|Acc],Perms1,Perms2).
-
- reverse_and_append([],Acc,Acc).
- reverse_and_append([X|Xs],Acc,Zs):-
- reverse_and_append(Xs,[X|Acc],Zs).
-
- nats(Max,Max,[Max]):-!.
- nats(Curr,Max,[Curr|Ns]):-
- Curr<Max,
- Curr1 is Curr+1,
- nats(Curr1,Max,Ns).
-
- perm([],[]).
- perm([X|Xs],Zs):-
- perm(Xs,Ys),
- insert(X,Ys,Zs).
-
- insert(X,Ys,[X|Ys]).
- insert(X,[Y|Ys],[Y|Zs]):-
- insert(X,Ys,Zs).
-
- g0(N):-nats(1,N,Ns),perm(Ns,_),fail.
- g0(_).
-
- g1(N,Ps):-nats(1,N,Ns),all_permutations(Ns,Ps).
- g2(N,Ps):-nats(1,N,Ns),findall(P,perm(Ns,P),Ps).
-
- test(Mes,LocalMes,X):-
- statistics(global_stack,[H1,_]),
- statistics(runtime,_),
- X,
- statistics(runtime,[_,T]),
- statistics(global_stack,[H2,_]),H is H2-H1,
- write([Mes,LocalMes]=[time=T,heap=H]),nl.
-
- t0(Mes):-test(Mes,nondet,g0(8)).
-
- t1(Mes):-test(Mes,determ,g1(8,_)).
-
- t2(Mes):-test(Mes,with_findall,g2(8,_)).
-
- go(Mes):-
- write('execute with -h20000 option'),nl,
- t0(Mes),fail;t1(Mes),fail;t2(Mes),fail.
-
- go:-go('BMARK_allperms').
-
- p:-[allperms].
-