2011-01-02から1日間の記事一覧

もっとアクティブパターンでFizzBuzz

F#

先日のアクティブパターンでFizzBuzzで書いた内容は今思うとあまりアクティブパターンのよさを引き出していないかも。 もっとアクティブパターンぽい方法を思いつきました。[<Test>] let ``fizzbuzz with partial active pattern``() = let (|Fizz|_|) n = if n % </test>…

判別共用体でFizzBuzz

F#

FizzBuzzの条件を判定する処理をばらばらのラムダ式にしてみました。 一度数値を判別共用体でラップしシーケンスにとります。後続のシーケンスでは、FizzBuzzの条件に合致したら値を置き換え、条件に合致しない場合や、すでにFizzBuzzしている場合はそのまま…

Seq.unfold と Seq.zip3 で FizzBuzz

F#

商を求めずに(%を使わないで)FizzBuzzできました。[<Test>] let ``fizzbuzz with Seq.unfold and Seq.zip3``() = let unfold num value = 1 |> Seq.unfold (fun n -> if num = n then Some(Some(value), 1) else Some(None, n + 1)) let nums = seq { for i in 1</test>…

Seq.scan で FizzBuzz

F#

これも商を求めないでFizzBuzz。Seq.scanを使ってみたかった。[<Test>] let ``fizzbuzz with Seq.scan``() = let fizzbuzz (f, b, value) n = let f', b' = f + 1, b + 1 match f, b with | 3, 5 -> (1 , 1 , "fizzbuzz") | 3, _ -> (1 , b', "fizz") | _, 5 -> (f</test>…