小编Seb*_*ata的帖子

规则形状的树折叠左scala实现

我正在尝试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(而不是叶子在分支内),因此递归没有结束。

tree recursion functional-programming scala

7
推荐指数
1
解决办法
164
查看次数

标签 统计

functional-programming ×1

recursion ×1

scala ×1

tree ×1