簡體   English   中英

Powerset-Smalltalk

[英]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

首先,您的設計存在兩個問題,例如您想要的是錯誤的

  1. 為了使c addToPowerSet可以在任何對象上工作,您必須將其添加到Object
  2. 表達式c addToPowerSet不引用電源集。

應該做的是創建Set的子類,該子類Set覆蓋add:方法,或者在Set添加方法addToPowerset:該方法應處理接收方不是powerset的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM