Написать обратное в Scala, используя Foldleft
Вот реализация:
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 списками?
Спасибо
1 ответ
Решение
Cons
работает с одним списком и одним элементом, так же как функция, переданная foldLeft
делает.
Декларация foldLeft
на List[A]
является:
def foldLeft[B](z: B)(f: (B, A) ⇒ B): B
Таким образом, мы можем написать ваш импл как:
l.foldLeft(List[A]())((acc, h) => ...)
и мы можем видеть, что тип B
является List[A]
так что два аргумента к нашему f
являются acc
(типа List[A]
) а также h
(типа A
).