Power set: Difference between revisions
Content added Content deleted
m (→{{header|Sidef}}: minor code simplification) |
|||
Line 163: | Line 163: | ||
set[8] = (1, 2, 4); |
set[8] = (1, 2, 4); |
||
</pre> |
</pre> |
||
=={{header|ATS}}== |
|||
<lang> |
|||
(* |
|||
** Solution to Power_set.dats |
|||
*) |
|||
(* ****** ****** *) |
|||
// |
|||
#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] *) |
|||
(* ****** ****** *) |
|||
</lang> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |
||
Line 176: | Line 268: | ||
t .= "}`n{" ; new subsets in new lines |
t .= "}`n{" ; new subsets in new lines |
||
} |
} |
||
MsgBox % RegExReplace(SubStr(t,1,StrLen(t)-1),",}","}")</lang> |
MsgBox % RegExReplace(SubStr(t,1,StrLen(t)-1),",}","}")</lang> |
||
=={{header|BBC BASIC}}== |
=={{header|BBC BASIC}}== |