Skip to content

Commit f706af7

Browse files
committed
---
yaml --- r: 5995 b: refs/heads/master c: 1a89e58 h: refs/heads/master i: 5993: f95e275 5991: 8627909 v: v3
1 parent 5908497 commit f706af7

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: b5ed1c46c0407c6a6c3354d1c8da8531d992064c
2+
refs/heads/master: 1a89e589a4c3d8c0119d81c45634dced10f1c541

trunk/src/lib/vec.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -433,14 +433,14 @@ fn filter<T>(f: block(T) -> bool, v: [mutable? T]) -> [T] {
433433
/*
434434
Function: foldl
435435
436-
FIXME: This looks like it's actually foldr
436+
Reduce a vector from left to right
437437
*/
438438
fn foldl<T, U>(p: block(U, T) -> U, z: U, v: [mutable? T]) -> U {
439-
let sz = len(v);
440-
if sz == 0u { ret z; }
441-
let first = v[0];
442-
let rest = slice(v, 1u, sz);
443-
ret p(foldl(p, z, rest), first);
439+
let accum = z;
440+
iter(v) { |elt|
441+
accum = p(accum, elt);
442+
}
443+
ret accum;
444444
}
445445

446446
/*

trunk/src/test/stdtest/vec.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,16 @@ fn test_foldl() {
292292
assert (sum == 15u);
293293
}
294294

295+
#[test]
296+
fn test_foldl2() {
297+
fn sub(&&a: int, &&b: int) -> int {
298+
a - b
299+
}
300+
let v = [1, 2, 3, 4];
301+
let sum = vec::foldl(sub, 0, v);
302+
assert sum == -10;
303+
}
304+
295305
#[test]
296306
fn iter_empty() {
297307
let i = 0;

0 commit comments

Comments
 (0)