小编use*_*174的帖子

Scala树递归折叠方法

给定(非二进制)树的以下定义:

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)

问题:有人可以帮助我如何编写上面的折叠尾部递归版本吗?

tree scala tail-recursion

9
推荐指数
1
解决办法
1555
查看次数

标签 统计

scala ×1

tail-recursion ×1

tree ×1