継続モナドについて勉強したこと、考えたことのまとめです。 継続渡しスタイル(CPS) 例として階乗を求めるプログラムを通常の書き方とCPSで書いてみる。 ※コメントで指摘いただきましたがこの例はCPSになってませんでした。 -- 通常スタイル fact :: (Eq a, Num a) => a -> a fact 0 = 1 fact n = n * fact (n-1) fact 3 == 3 * fact 2 == 3 * 2 * fact 1 == 3 * 2 * 1 * fact 0 == 3 * 2 * 1 * 1 -- CPS cFact :: (Eq a, Num a) => a -> (a -> r) -> r cFact 0 f = f 1 cFact n f = f $ cFact (n-1) (n*) cFact 3 id == cFact 2 (3*) == 3