8.3 Higher Order Functions
Rust가 제공하는 고차정렬함수(HOF). 이 함수는 하나 혹은 그 이상의 함수를 취하고 더 유용한 함수를 생성한다. HOF와 지연 반복자는 Rust의 고유한 기능적 특색이다.
fn is_odd(n: u32) -> bool {
n % 2 == 1
}
fn main() {
println!("Find the sum of all the squared odd numbers under 1000");
let upper = 1000;
// 순차적 명령구문 접근법
// 누석 변수 선언
let mut acc = 0;
// 반복: 0, 1, 2, ... 무한대까지
for n in 0.. {
// 수를 제곱
let n_squared = n * n;
if n_squared >= upper {
// 상한을 초과하면 break로 루프 탈출.
break;
} else if is_odd(n_squared) {
// 값이 홀수이면 누적한다.
acc += n_squared;
}
}
println!("imperative style: {}", acc);
// 함수적 접근법
let sum_of_squared_odd_numbers: u32 =
(0..).map(|n| n * n) // 모든 자연수를 제곱
.take_while(|&n| n < upper) // 상한선 이하
.filter(|n| is_odd(*n)) // 홀수라면
.fold(0, |sum, i| sum + i); // 이들의 합
println!("functional style: {}", sum_of_squared_odd_numbers);
}