Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
37
Task/Permutations/Mercury/permutations.mercury
Normal file
37
Task/Permutations/Mercury/permutations.mercury
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
:- module permutations2.
|
||||
:- interface.
|
||||
|
||||
:- import_module io.
|
||||
|
||||
:- pred main(io::di, io::uo) is det.
|
||||
|
||||
|
||||
:- import_module list.
|
||||
:- import_module set_ordlist.
|
||||
:- import_module set.
|
||||
:- import_module solutions.
|
||||
|
||||
%% permutationSet(List, Set) is true if List is a permutation of Set:
|
||||
:- pred permutationSet(list(A)::out,set(A)::in) is nondet.
|
||||
|
||||
%% Two ways to compute all permutations of a given list (using backtracking):
|
||||
:- func all_permutations1(list(int))=set_ordlist.set_ordlist(list(int)).
|
||||
:- func all_permutations2(list(int))=set_ordlist.set_ordlist(list(int)).
|
||||
|
||||
:- implementation.
|
||||
|
||||
|
||||
permutationSet([],set.init).
|
||||
permutationSet([H|T], S) :- set.member(H,S), permutationSet(T,set.delete(S,H)).
|
||||
|
||||
all_permutations1(L) =
|
||||
solutions_set(pred(X::out) is nondet:-permutationSet(X,set.from_list(L))).
|
||||
|
||||
%%Alternatively, using the imported list.perm predicate:
|
||||
all_permutations2(L) =
|
||||
solutions_set(pred(X::out) is nondet:-perm(L,X)).
|
||||
|
||||
main(!IO) :-
|
||||
print(all_permutations1([1,2,3,4]),!IO),
|
||||
nl(!IO),
|
||||
print(all_permutations2([1,2,3,4]),!IO).
|
||||
Loading…
Add table
Add a link
Reference in a new issue