고차 함수
Rust는 고차 함수(Higher Order Functions, HOF)를 제공합니다. 이들은 하나 이상의 함수를 인자로 받거나 더 유용한 함수를 만들어내는 함수들입니다. HOF와 게으른(lazy) 이터레이터는 Rust에 함수형 프로그래밍의 풍미를 더해줍니다.
fn is_odd(n: u32) -> bool {
n % 2 == 1
}
fn main() {
println!("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;
} else if is_odd(n_squared) {
// 홀수라면 값을 누적합니다
acc += n;
}
}
println!("명령형 스타일: {}", acc);
// 함수형 접근 방식
let sum: u32 =
(0..).take_while(|&n| n * n < upper) // 상한 미만
.filter(|&n| is_odd(n * n)) // 홀수인 것들
.sum(); // 합계를 구함
println!("함수형 스타일: {}", sum);
}