procedure power_set (s) if *s = 0 then suspend set () else { head := set(?s) every ps := power_set (s -- head) do { suspend ps suspend ps ++ head } } end procedure main () every s := power_set (set(1,2,3,4)) do { # power_set's values are generated by 'every' writes ("[ ") every writes (!s || " ") write ("]") } end