3 fn foldl<T, U, F>(values: &[T], initial: U, mut function: F) -> U
10 [head, tail @ ..] => foldl(tail, function(initial, head), function),
12 let res = initial.clone();
18 fn foldr<T, U, F>(values: &[T], initial: U, mut function: F) -> U
24 [head @ .., tail] => foldr(head, function(tail, initial), function),
26 let res = initial.clone();
33 let x = &[1, 2, 3, 4, 5];
35 let product = foldl(x, 1, |a, b| a * *b);
36 assert_eq!(product, 120);
38 let sum = foldr(x, 0, |a, b| *a + b);