给定(非二进制)树的以下定义:
sealed trait Tree[+A]
case class Node[A](value: A, children: List[Node[A]]) extends Tree[A]
object Tree {...}
Run Code Online (Sandbox Code Playgroud)
我写了以下折叠方法:
def fold[A, B](t: Node[A])(f: A ? B)(g: (B, List[B]) ? B): B =
g(f(t.value), t.children map (fold(_)(f)(g)))
Run Code Online (Sandbox Code Playgroud)
这可以很好地用于(除其他外)这个map方法:
def map[A, B](t: Node[A])(f: A ? B): Node[B] =
fold(t)(x ? Node(f(x), List()))((x, y) ? Node(x.value, y))
Run Code Online (Sandbox Code Playgroud)
问题:有人可以帮助我如何编写上面的折叠尾部递归版本吗?