[英]Powerset - smalltalk
您能否解釋以下代碼為何錯誤:
powerset
|ps|
ps := Set with: (Set new).
self do: [:item | ps addToPowerSet: item].
^ps
addToPowerSet: elt
| first second third var |
first := self copy.
second := self copy.
third := Set new.
second do: [:item | var := item copy. var add: elt. third add: var.].
^ first addAll: third
這兩種方法都在Set類中實現。 我已經嘗試調試它,並且我想錯誤在這里:
second do: [:item | var := item copy. var add: elt. third add: var.].
但是我不知道到底是什么。
好的,addToPowerSet方法的示例:
假設powerset變量ps相等:
{{empty}, {a}, {b}, {a,b}}
和項目= c。 addToPowerSet方法應返回:
{
{empty}, {a}, {b}, {a,b},
{c}, {a, c}, {b, c}, {a,b,c}
}
我不是很熟悉stackoverflow中的格式,但這不是每次調用addToPowerSet時都返回一個新集合的問題嗎? 這似乎可行:
addToPowerSet: elt
| second third var |
second := self copy.
third := Set new.
second do:
[:item |
var := item copy.
var add: elt.
third add: var].
^self addAll: third
首先,您的設計存在兩個問題,例如您想要的是錯誤的 :
c addToPowerSet
可以在任何對象上工作,您必須將其添加到Object
。 c addToPowerSet
不引用電源集。 您應該做的是創建Set
的子類,該子類Set
覆蓋add:
方法,或者在Set
添加方法addToPowerset:
該方法應處理接收方不是powerset的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.