CPS(Continuation passing style, 継続渡しスタイル)は、関数型プログラミングにおけるプログラムの書き方の一つである。CPSを導入する簡単な例をいくつか紹介しよう。 まず、入力された数値が3の倍数かどうかを判定するプログラムを作ってみよう。 foo :: IO Bool foo = do n <- readLn :: IO Int return (n `mod` 3 == 0) ここで「CPS変換」なる儀式を行うと…こうなる! foo' :: (Bool -> IO r) -> IO r foo' cont = do n <- readLn :: IO Int cont (n `mod` 3 == 0) 「なにこれ、returnを置き換えただけじゃねえか!意味わかんねー!」という声が聞こえてきそうだが、もう少し考えてみよう。 3の倍数が入力されたらFizz、5の