我正在尝试foldLeft为规则形状的树实现尾递归函数。该练习来自练习 3.3.5.3 中的“函数式编程的科学”一书。
到现在为止,我能够做功课,但我不知道我在这个功课中遗漏了什么。
规则形状的树有一个定义:
sealed trait RTree[A]
final case class Leaf[A](x: A) extends RTree[A]
final case class Branch[A](xs: RTree[(A,A)]) extends RTree[A]
Run Code Online (Sandbox Code Playgroud)
方法签名和预期结果:
@tailrec
def foldLeft[A,R](t: RTree[A])(init: R)(f: (R,A)=>R): R= ???
foldLeft(Branch(Branch(Leaf(((1,2),(3,4))))))(0)(_+_)
//10
Run Code Online (Sandbox Code Playgroud)
到目前为止最大的问题是我不知道如何匹配和访问Branch. 我只能匹配Leafand Branch(而不是叶子在分支内),因此递归没有结束。