18 lines
493 B
OCaml
18 lines
493 B
OCaml
let rec pr_perm k n l =
|
|
let a, b = let c = k/n in c, k-(n*c) in
|
|
let e = List.nth l b in
|
|
let rec sub e = function
|
|
| [] -> failwith "sub"
|
|
| h :: t -> if h = e then t else h :: sub e t in
|
|
(Printf.printf " %d" e; if n > 1 then pr_perm a (n-1) (sub e l))
|
|
|
|
let show_perms l =
|
|
let n = List.length l in
|
|
let rec fact n = if n < 3 then n else n * fact (n-1) in
|
|
for i = 0 to (fact n)-1 do
|
|
pr_perm i n l;
|
|
print_newline()
|
|
done
|
|
|
|
let () = show_perms [1;2;3;4]
|