Add std::vec::foldr

This commit is contained in:
Brian Anderson 2011-10-27 21:34:16 -07:00
parent 8ad857f453
commit d96c419b14
2 changed files with 24 additions and 1 deletions

View File

@ -435,7 +435,7 @@ Function: foldl
Reduce a vector from left to right
*/
fn foldl<T, U>(p: block(U, T) -> U, z: U, v: [mutable? T]) -> U {
fn foldl<T, U>(p: block(T, U) -> T, z: T, v: [mutable? U]) -> T {
let accum = z;
iter(v) { |elt|
accum = p(accum, elt);
@ -443,6 +443,19 @@ fn foldl<T, U>(p: block(U, T) -> U, z: U, v: [mutable? T]) -> U {
ret accum;
}
/*
Function: foldr
Reduce a vector from right to left
*/
fn foldr<T, U>(p: block(T, U) -> U, z: U, v: [mutable? T]) -> U {
let accum = z;
riter(v) { |elt|
accum = p(elt, accum);
}
ret accum;
}
/*
Function: any

View File

@ -302,6 +302,16 @@ fn test_foldl2() {
assert sum == -10;
}
#[test]
fn test_foldr() {
fn sub(&&a: int, &&b: int) -> int {
a - b
}
let v = [1, 2, 3, 4];
let sum = vec::foldr(sub, 0, v);
assert sum == -2;
}
#[test]
fn iter_empty() {
let i = 0;