Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

高階関数

Rust は高階関数 (HOF) を提供します。これらは、1 つ以上の関数を受け取ったり、より有用な関数を生成したりする関数です。HOF と遅延イテレータは、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);
}

Option および Iterator はそれぞれ相当数の HOF を実装しています。