我被给予了以下二叉树的定义
abstract class Tree[+A]
case class Leaf[A](value: A) extends Tree[A]
case class Node[A](value: A, left: Tree[A], right: Tree[A]) extends Tree[A]
并且以下函数
def fold_tree[A,B](f1: A => B)(f2: (A, B, B) => B)(t: Tree[A]): B = t match {
case Leaf(value) => f1(value)
case Node(value, l, r) => f2(value, fold_tree(f1)(f2)(l), fold_tree(f1)(f2)(r)) //post order
}
我被要求使用fold方法返回树中最右边的值。这应该如何实现?我不确定我完全理解fold的含义,但我认为fold的目的是对树中的每个元素执行一些操作。我如何使用它来只返回树的最右边的值?
我也不确定如何调用该方法。我一直遇到未指定参数类型的问题。有人能展示一下调用fold_tree方法的正确方式吗?
t => t
被定义为identity
,通常最好在你不使用参数的位置放置下划线:(_,_,z) => z
。 - Alec