function powerset{T}(x::Vector{T}) result = Vector{T}[[]] for elem in x, j in eachindex(result) push!(result, [result[j] ; elem]) end result end