Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
83
Task/Power-set/ATS/power-set.ats
Normal file
83
Task/Power-set/ATS/power-set.ats
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
(* ****** ****** *)
|
||||
//
|
||||
#include
|
||||
"share/atspre_define.hats" // defines some names
|
||||
#include
|
||||
"share/atspre_staload.hats" // for targeting C
|
||||
#include
|
||||
"share/HATS/atspre_staload_libats_ML.hats" // for ...
|
||||
//
|
||||
(* ****** ****** *)
|
||||
//
|
||||
extern
|
||||
fun
|
||||
Power_set(xs: list0(int)): void
|
||||
//
|
||||
(* ****** ****** *)
|
||||
|
||||
// Helper: fast power function.
|
||||
fun power(n: int, p: int): int =
|
||||
if p = 1 then n
|
||||
else if p = 0 then 1
|
||||
else if p % 2 = 0 then power(n*n, p/2)
|
||||
else n * power(n, p-1)
|
||||
|
||||
fun print_list(list: list0(int)): void =
|
||||
case+ list of
|
||||
| nil0() => println!(" ")
|
||||
| cons0(car, crd) =>
|
||||
let
|
||||
val () = begin print car; print ','; end
|
||||
val () = print_list(crd)
|
||||
in
|
||||
end
|
||||
|
||||
fun get_list_length(list: list0(int), length: int): int =
|
||||
case+ list of
|
||||
| nil0() => length
|
||||
| cons0(car, crd) => get_list_length(crd, length+1)
|
||||
|
||||
|
||||
fun get_list_from_bit_mask(mask: int, list: list0(int), result: list0(int)): list0(int) =
|
||||
if mask = 0 then result
|
||||
else
|
||||
case+ list of
|
||||
| nil0() => result
|
||||
| cons0(car, crd) =>
|
||||
let
|
||||
val current: int = mask % 2
|
||||
in
|
||||
if current = 0 then
|
||||
get_list_from_bit_mask(mask >> 1, crd, result)
|
||||
else
|
||||
get_list_from_bit_mask(mask >> 1, crd, list0_cons(car, result))
|
||||
end
|
||||
|
||||
|
||||
implement
|
||||
Power_set(xs) = let
|
||||
val len: int = get_list_length(xs, 0)
|
||||
val pow: int = power(2, len)
|
||||
fun loop(mask: int, list: list0(int)): void =
|
||||
if mask > 0 && mask >= pow then ()
|
||||
else
|
||||
let
|
||||
val () = print_list(get_list_from_bit_mask(mask, list, list0_nil()))
|
||||
in
|
||||
loop(mask+1, list)
|
||||
end
|
||||
in
|
||||
loop(0, xs)
|
||||
end
|
||||
|
||||
(* ****** ****** *)
|
||||
|
||||
implement
|
||||
main0() =
|
||||
let
|
||||
val xs: list0(int) = cons0(1, list0_pair(2, 3))
|
||||
in
|
||||
Power_set(xs)
|
||||
end (* end of [main0] *)
|
||||
|
||||
(* ****** ****** *)
|
||||
Loading…
Add table
Add a link
Reference in a new issue