summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-03-16 13:10:45 +0000
committerAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-03-16 13:10:45 +0000
commit3bcd23488e84ef1af0ba77653e8c0d74bac846e6 (patch)
tree81353463843bd53d5c0d71c272d8dd7f1674d6f3
parentb61957e6f0c6313b29100fc0048e5c7bdd917e77 (diff)
downloadscala-3bcd23488e84ef1af0ba77653e8c0d74bac846e6.tar.gz
scala-3bcd23488e84ef1af0ba77653e8c0d74bac846e6.tar.bz2
scala-3bcd23488e84ef1af0ba77653e8c0d74bac846e6.zip
Fixes #3091. Review by community.
-rw-r--r--src/library/scala/collection/TraversableLike.scala10
-rw-r--r--test/files/pos/scan.scala2
2 files changed, 8 insertions, 4 deletions
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala
index 9d65e2c224..5ef7b5205a 100644
--- a/src/library/scala/collection/TraversableLike.scala
+++ b/src/library/scala/collection/TraversableLike.scala
@@ -645,10 +645,14 @@ self =>
* @return collection with intermediate results
*/
def scanRight[B, That](z: B)(op: (A, B) => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {
- val (_, b) = foldRight(z, bf(repr) += z) { (x, acc) =>
- val next = op(x, acc._1)
- (next, acc._2 += next)
+ var lst = List(z)
+ foldRight(z) { (x, acc) =>
+ val next = op(x, acc)
+ lst ::= next
+ next
}
+ val b = bf(repr)
+ for (elem <- lst) b += elem
b.result
}
diff --git a/test/files/pos/scan.scala b/test/files/pos/scan.scala
index 98361b9167..a88abe63d2 100644
--- a/test/files/pos/scan.scala
+++ b/test/files/pos/scan.scala
@@ -8,7 +8,7 @@ object Test {
val lst = List(1, 2, 3, 4, 5)
assert(lst.scanLeft(0)(_ + _) == List(0, 1, 3, 6, 10, 15))
- assert(lst.scanRight(0)(_ + _) == List(0, 5, 9, 12, 14, 15))
+ assert(lst.scanRight(0)(_ + _) == List(15, 14, 12, 9, 5, 0))
val emp = List[Int]()
assert(emp.scanLeft(0)(_ + _) == List(0))