注意:這是我之前關於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