1

这是一个实现:

def reverse[A](l: List[A]): List[A] = foldLeft(l, List[A]())((acc,h) => Cons(h,acc))

我不明白编译器对 (acc,h); 的理解是什么。最初,f 函数遇到 (ListA,l),它们是 2 个列表,那么 Cons 是否也使用 2 个列表?

谢谢

4

1 回答 1

2

Cons与一个列表和一个元素一起工作,就像传递给的函数foldLeft一样。

foldLefton的声明List[A]是:

def foldLeft[B](z: B)(f: (B, A) ⇒ B): B

所以我们可以把你的 impl 写成:

l.foldLeft(List[A]())((acc, h) => ...)

我们可以看到类型BList[A],所以我们的两个参数facc(类型List[A])和h(类型A)。

于 2014-11-26T15:42:24.290 回答