注意:这是我之前关于powersets的问题的续集。在Erlang中生成没有堆栈的powerset
我有一个很好的Ruby解决我以前question有关生成一组的幂,而不需要保持堆栈:
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本书:)),但我很困惑example以及sepp2k对我之前关于powersets的问题给予的评论。我不明白这个例子的最后一行 - 我知道的唯一的事情就是列表理解。我不明白我如何修改它以便能够对每个生成的子集执行某些操作(然后将其抛出并继续处理下一个子集)。
如何在Erlang中重写这个Ruby迭代powerset的生成?或者,也许提供的Erlang例子已经几乎适合需要?
可能是疯狂的问题:你为什么要生成没有堆栈的家伙? Erlang中可能最快的版本会保持与您正在设置的元素数量成正比的堆栈。请注意,在Erlang中,堆栈比其他语言的限制更少。它会自动增长,不能轻易耗尽。 – 2011-12-28 17:25:56
我想尝试生成一个相当大的集合 - 超过300个元素的powerset。但是我不需要所有的子集,所以我试图找到一个解决方案来一次生成一个子集,并根据特定标准对其进行过滤。 – skanatek 2012-01-03 18:53:11