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