次のリストがあります (ほんの一例です。リストの深さは任意です)。
val foo = List(1, List(2, List(3, 4)), List(5, List(6, List(7, List(8,9,10)))))
リストをトラバースし、要素を述語からの値で「置換」したいと思います。効果のあるもの
map(case 4 => 42 case x => x)
次のような新しいリストを生成する必要があります。
List(1, List(2, List(3, 42)), List(5, List(6, List(7,List(8,9,10)))))
以下の再帰関数を使用して実行しようとしています。
def copyListReplace(tree: List[Any], p: Any => Any): List[Any] = {
tree.map(x =>
x match {
case y: List[Any] => copyList(y.tail, p)
case t => p(t)
}
)
}
しかし、私は望ましい結果を得ていません。
scala>println(copyListReplace(foo, (x => x match{ case 4 => 42 case _ => t})))
List(1, List(List(42)), List(List(7)))
よろしくお願いします。