Написать обратное в 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).

Другие вопросы по тегам