[ stack ] is (ps).stack [ stack ] is (ps).items [ stack ] is (ps).result [ 1 - (ps).items put 0 (ps).stack put [] (ps).result put [ (ps).result take (ps).stack behead drop nested join (ps).result put (ps).stack take dup (ps).items share = iff [ drop (ps).stack size 1 > iff [ 1 (ps).stack tally ] ] else [ dup (ps).stack put 1+ (ps).stack put ] (ps).stack size 1 = until ] (ps).items release (ps).result take ] is (ps) ( n --> ) [ dup size dip [ witheach [ over swap peek swap ] ] nip pack ] is arrange ( [ [ --> [ ) [ dup [] = iff nested done dup size (ps) ' [ [ ] ] swap join [] unrot witheach [ dip dup arrange nested rot swap join swap ] drop ] is powerset ( [ --> [ ) ' [ [ 1 2 3 4 ] [ ] [ [ ] ] ] witheach [ say "The powerset of " dup echo cr powerset witheach [ echo cr ] cr ]