fun powerset [] = [ [] ] | powerset x = [ [x] ] | powerset (x , y) = [ [x,y], [x], [y], [] ] | powerset (x :: y :: rest) = [ powerset(x, rest) , powerset(y, rest) ] ;