2015-03-21 2 views
-2

Я хочу реализовать функцию, которая принимает список, например List (3,4,5), и возвращает список, в котором каждый элемент увеличивается на n, например List (3 + n, 4 + n, 5 + п) - как я могу написать эти функции, используя foldRight и то, что будет его временной сложностиscala FoldRight function on scala List

например песни1 = Список (3,4,5) определить функ (list1,2) дает - список (5 , 6,9)

ответ

-2

Не знаю, почему вы хотите использовать foldRight

Это гораздо лучше подходит для отображения, т.е.

List(3,4,5).map(_+2) == List(5,6,7) 
+2

Возможно, вы имели в виду 'map'. 'foreach' предназначен только для действий, которые производят' Unit', и результат всегда 'Unit', а не' List [A] ' – bmaderbacher

5

идиоматически это случай использования для map:

List(3, 4, 5).map(_ + 2) == List(5, 6, 7) 

Тем не менее, она может быть записана с помощью foldRight:

List(3, 4, 5).foldRight(List.empty[Int]) { (n, acc) => 
    (n + 2) :: acc 
} 

Это будет иметь временную сложность O (N). foldRight является линейной операцией, а до scala.collection.List - постоянное время.