29 lines
780 B
Text
29 lines
780 B
Text
{def powerset
|
|
|
|
{def powerset.r
|
|
{lambda {:ary :ps :i}
|
|
{if {= :i {A.length :ary}}
|
|
then :ps
|
|
else {powerset.r :ary
|
|
{powerset.rr :ary :ps {A.length :ps} :i 0}
|
|
{+ :i 1}} }}}
|
|
|
|
{def powerset.rr
|
|
{lambda {:ary :ps :len :i :j}
|
|
{if {= :j :len}
|
|
then :ps
|
|
else {powerset.rr :ary
|
|
{A.addlast! {A.concat {A.get :j :ps}
|
|
{A.new {A.get :i :ary}}}
|
|
:ps}
|
|
:len
|
|
:i
|
|
{+ :j 1}} }}}
|
|
|
|
{lambda {:ary}
|
|
{A.new {powerset.r :ary {A.new {A.new}} 0}}}}
|
|
|
|
-> powerset
|
|
|
|
{powerset {A.new 1 2 3 4}}
|
|
-> [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3],[4],[1,4],[2,4],[1,2,4],[3,4],[1,3,4],[2,3,4],[1,2,3,4]]]
|