Scala: получение промежуточных результатов сворачивания

Я несколько раз сталкивался с проблемой сохранения состояния во время операции сопоставления. Представьте себе следующую задачу:

Для данного списка [Int] сопоставьте каждый элемент с суммой всех предшествующих элементов и самого себя.
Мы несколько раз сталкивались с проблемой сохранения состояния во время операции карты. Представьте себе следующую задачу: учитывая List [Int], сопоставьте каждый элемент с суммой всех предыдущих элементов и ...

Я несколько раз сталкивался с проблемой сохранения состояния во время операции сопоставления. Представьте себе следующую задачу:

Для данного списка [Int] сопоставьте каждый элемент с суммой всех предшествующих элементов и самого себя.
Мы несколько раз сталкивались с проблемой сохранения состояния во время операции карты. Представьте себе следующую задачу: учитывая List [Int], сопоставьте каждый элемент с суммой всех предыдущих элементов и ...

Я несколько раз сталкивался с проблемой сохранения состояния во время операции сопоставления. Представьте себе следующую задачу:

Для данного списка [Int] сопоставьте каждый элемент с суммой всех предшествующих элементов и самого себя.
Таким образом, 1,2,3 становится 1, 1 + 2, 1 + 2 + 3.

Одно из решений, которое я придумал:

scala> val a = 1 to 5                                                
a: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(1, 2, 3, 4, 5)

scala> a.foldLeft(List(0)){ case (l,i) => (l.head + i) :: l }.reverse
res3: List[Int] = List(0, 1, 3, 6, 10, 15)

Но почему-то я чувствую, что должно быть более простое решение.

16
задан ziggystar 26 July 2012 в 08:55
поделиться