Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
这是一个实现:
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 个列表?
谢谢
Cons与一个列表和一个元素一起工作,就像传递给的函数foldLeft一样。
Cons
foldLeft
foldLefton的声明List[A]是:
List[A]
def foldLeft[B](z: B)(f: (B, A) ⇒ B): B
所以我们可以把你的 impl 写成:
l.foldLeft(List[A]())((acc, h) => ...)
我们可以看到类型B是List[A],所以我们的两个参数f是acc(类型List[A])和h(类型A)。
B
f
acc
h
A