【发布时间】:2020-04-13 06:09:07
【问题描述】:
我正在尝试为规则形状的树实现尾递归 foldLeft 函数。该练习来自练习 3.3.5.3 中的“The Science of Functional Programming”一书。
到现在为止,我可以做这些练习,但我不知道我在这个练习中缺少什么。
规则形状的树有一个定义:
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]
方法签名和预期结果:
@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
目前最大的问题是我不知道如何匹配和访问Branch的case类里面的元素。我只能匹配Leaf 和Branch(而不是分支内的叶子),因此递归没有结束。
【问题讨论】:
标签: scala recursion functional-programming tree