2016-06-20 18 views
2

私はこのようなケースクラスがあります。Scalaの再帰的なケースクラスの減少

case class Test(i: Int, t: Option[Test]) 

を私は今、このケースクラスを削減し、すべてのiさんを追加したいと思います。 。私はこの

val x = Test(1, Some(Test(2, Some(Test(3,None))))) 

のような入力を持っているのであれば、たとえば、私は結果は6であることを期待し、ここで私がこれまでにしようとしているものです:

def all(acc: Int, test: Test): Int = { 
    if (test.t.isDefined) 
    all(acc, test.t.get) 
    else 
    acc + test.i 
} 

は、これは私の3を与えると私は見ます私は再帰のどこかで細かいディテールが不足していて、どこを見ることができないのですか?すべての手がかりは?そこ

+3

再帰するときには、加算されていない、プラスあなたはアキュムレータを返していません。 –

+0

あなたはそれを詳しく説明できますか?それをしても、私はまだ3を得る! – sparkr

+1

再帰呼び出しでは、 'acc'に' i'を追加する必要があります: 'all(acc + test.i、test.t.get)'。 –

答えて

1

あなたが行く:

def sum(acc: Int, test: Test): Int = { 
    test.t match { 
    case Some(x) => sum(acc + test.i, x) 
    case None => acc + test.i 
    } 
} 

とアキュムレータなしのバージョン:

def sum(test: Test): Int = { 
    test.t match { 
    case Some(x) => test.i + sum(x) 
    case None => test.i 
    } 
} 
関連する問題