注意:这是我之前关于幂集的问题的续集。
我找到了一个不需要保留堆栈的好的Ruby解决方案,用来生成一个集合的幂集。之前我在这个问题上提出过。
class Array
def powerset
return to_enum(:powerset) unless block_given?
1.upto(self.size) do |n|
self.combination(n).each{|i| yield i}
end
end
end
# demo
['a', 'b', 'c'].powerset{|item| p item} # items are generated one at a time
ps = [1, 2, 3, 4].powerset # no block, so you'll get an enumerator
10.times.map{ ps.next } # 10.times without a block is also an enumerator
这个工具可以很好地完成任务。
但是,我想尝试使用Erlang重写相同的解决方案,因为对于{|item| p item}
块,我已经编写了大量可以在Erlang中运行的代码(它对每个生成的子集执行一些操作)。
虽然我有一些使用Erlang的经验(我已经阅读了所有2本书:),但我对示例和sepp2k针对我的上一个幂集问题提供的评论感到非常困惑。我不理解示例的最后一行 - 我唯一知道的就是它是列表推导式。我不明白如何修改它才能够对每个生成的子集进行一些操作(然后将其丢弃并继续下一个子集)。
我该如何在Erlang中重写这个Ruby迭代幂集生成器?或者提供的Erlang示例已经几乎符合要求了吗?