Seq.choose と Seq.exists で FizzBuzz
無理やりな感が満載ですが。
Seq.chooseで1から100までの数値をシーケンスのグループに分け、そのあとでSeq.existsでそれぞれのグループへの存在チェックをしています。
[<Test>]
let ``fizzbuzz with Seq.choose``() =let (|Fizz|_|) n = if n % 3 = 0 then Some() else None
let (|Buzz|_|) n = if n % 5 = 0 then Some() else Nonelet nums = seq { 1 .. 100 }
let fizzbuzz = nums |> Seq.choose (fun n -> match n with Fizz & Buzz -> Some(n) | _ -> None)
let fizz = nums |> Seq.choose (fun n -> match n with Fizz -> Some(n) | _ -> None)
let buzz = nums |> Seq.choose (fun n -> match n with Buzz -> Some(n) | _ -> None)nums
|> Seq.map (fun n ->
if fizzbuzz |> Seq.exists ((=) n) then "fizzbuzz"
elif fizz |> Seq.exists ((=) n) then "fizz"
elif buzz |> Seq.exists ((=) n) then "buzz"
else string(n))
|> Seq.iter (printfn "%s")