FizzBuzz

ざっと流し読みした後、手を動かしながら判別共用体の手前まで実践F#を読んだところで、末尾再帰とパターンマッチでFizzBuzzかけるなーとおもって書いてみた。

let fizzBuzz1ToMax max =
    let oneFizzBuzz x =
        match x with
            | _ when 0 = x % 5 && 0 = x % 3 -> "FizzBuzz"
            | _ when 0 = x % 5 && 0 < x % 3 -> "Buzz"
            | _ when 0 < x % 5 && 0 = x % 3 -> "Fizz"
            | _ -> x.ToString()
        in
    let rec fizzBuzzRecursive current max =
        do printf "%s / " (oneFizzBuzz current)
        if current < max then
            fizzBuzzRecursive (current + 1) max
        in
    fizzBuzzRecursive 1 max;;

ざっと読んだ時、コレクションに対する操作が色々あったのでそこまで来るとまた書き方変わるんだろうなーと思いつつ。
しかしループの前に再帰があるんですね。