次のコード例は、「ツイート」を管理するバイナリツリーの例の一部を示しています。ツリーの各ノードは、それが述語(p)に適合するかどうかチェックされる。ツイートが述語に合っている場合、それは新しいツリー集合に蓄積される(acc)。一方、p = falseの場合は、単に次のノードに移動します。Scalaでツリー再帰を書く標準的な方法は何ですか?
def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet = {
var result = acc
if(p(elem)){
result = right.filterAcc(p, result incl elem)
result = left.filterAcc(p, result incl elem)
}else {
result = right.filterAcc(p, result)
result = left.filterAcc(p, result)
}
result
}
次のようにpが渡された関数であるのに対し、プログラムが、呼び出されます。
filterAcc(p, new Empty)
私の質問があり、再帰のためのScalaでの標準的な方法は何ですか?特に、結果を最高レベルの再帰に戻すこと。私の知る限りコーセラのコースから、このクラスのインタフェースを覚えて、あなたが実際にrecursion
(ないregression
)を意味仮定として
おかげ
「再帰」を意味すると思います。あなたの実際の質問が何であるか分かりません。あなたは彼を最低レベルから戻し、次の最低レベルはそれを戻します。 –
ここでは "var"の使用は間違いなく正式ではありません。私は 'if(p(elem))left.filterAcc(p、right.filterAcc(p、acc、incl elem))else ...'( 'elem'を2回追加する必要はありません) –