diff options
| author | Brian Anderson <banderson@mozilla.com> | 2011-10-27 20:47:06 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-10-27 20:47:06 -0700 |
| commit | 1a89e589a4c3d8c0119d81c45634dced10f1c541 (patch) | |
| tree | 80685a269602f0802fffd3969ee53d65814c78ca /src/lib | |
| parent | b5ed1c46c0407c6a6c3354d1c8da8531d992064c (diff) | |
Implement vec::foldl without recursion
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/vec.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lib/vec.rs b/src/lib/vec.rs index b7f441c321f..413d92f85bc 100644 --- a/src/lib/vec.rs +++ b/src/lib/vec.rs @@ -433,14 +433,14 @@ fn filter<T>(f: block(T) -> bool, v: [mutable? T]) -> [T] { /* Function: foldl -FIXME: This looks like it's actually foldr +Reduce a vector from left to right */ fn foldl<T, U>(p: block(U, T) -> U, z: U, v: [mutable? T]) -> U { - let sz = len(v); - if sz == 0u { ret z; } - let first = v[0]; - let rest = slice(v, 1u, sz); - ret p(foldl(p, z, rest), first); + let accum = z; + iter(v) { |elt| + accum = p(accum, elt); + } + ret accum; } /* |
