2016-11-25 3 views
0

私は、結合方法を使用して2つのツリーの結合を取ろうとしています。コードをチェックする目的で、メソッド内にprintステートメントを追加しました。しかし、accのプリントは、それがrecrsionで変化していないことを示しています。私はなぜこれが起こっているのか分からない。誰かが説明してくれますか?Scalaのツリーの組合

class NonEmpty(elem: Tweet, left: TweetSet, right: TweetSet) extends TweetSet { 

    def union(that: TweetSet): TweetSet = 
    { 
     def unionRec(set:TweetSet,acc:TweetSet): TweetSet = 
     { 
     if (set.isEmpty) 
      return acc 
     else 
     { 
      acc.foreach(x=> println(x)) 
      println("####################") 
      set.foreach(x=>println(x)) 
      println("####################") 
      unionRec(set.takeRight,unionRec(set.takeLeft,acc.incl(set.rootTweet))) 
      return acc 
     } 
     } 
     unionRec(this,that) 
    } 

    def takeLeft: TweetSet = 
    { 
     return left 
    } 

    def takeRight: TweetSet = 
    { 
     return right 
    } 
    def rootTweet: Tweet = 
    { 
     return elem 
    } 
    def incl(x: Tweet): TweetSet = { 
    if (x.text < elem.text) new NonEmpty(elem, left.incl(x), right) 
    else if (elem.text < x.text) new NonEmpty(elem, left, right.incl(x)) 
    else this 
    } 
    def isEmpty: Boolean = false 
    def foreach(f: Tweet => Unit): Unit = { 
    f(elem) 
    left.foreach(f) 
    right.foreach(f) 
    } 
} 
class Empty extends TweetSet { 
def isEmpty: Boolean = true 
} 
+3

再:return' 'の使用状況 - http://stackoverflow.com/a/12560532/409976 。 –

+0

私は方法のためにそれを省略できる可能性があることを知っている...あなたはそれがこの問題を引き起こしていると言っていますか? – sarthak

+0

答えを与えられた@arthhak、はい。 – Reactormonk

答えて

1

あなたの最後の質問(Adding an element to a tree in scala)で行ったようにあなたはまったく同じ間違いをしています。あなたはunionRec -callの結果を放棄しています。 TweetSetは変更できないので、accは決して変更されません。

この2行:

unionRec(set.takeRight,unionRec(set.takeLeft,acc.incl(set.rootTweet))) 
return acc 

はこれに変更する必要があります:

return unionRec(set.takeRight,unionRec(set.takeLeft,acc.incl(set.rootTweet))) 
+0

私はこれを最初に行いました。同じ結果が得られましたが、繰り返しごとに1つの余分な要素を含む 'acc'を渡しています。しかし、メソッドに示されているように 'acc'を出力すると、すべての反復でaccの値は変更されません。これは起こるべきではない – sarthak

+0

私はちょうどその変更をあなたのコードを実行し、それは働いた。 – marstran

+0

ありがとう...私はなぜそれが私のために働いていないのか分かりません.... – sarthak

関連する問題