这是一个实现:
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个列表吗?
感谢
答案 0 :(得分:1)
Cons
使用一个列表和一个元素,就像传递给foldLeft
的函数一样。
foldLeft
上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]
)和{ {1}}(类型h
)。