To Mock a Mockingbird を読んでいます。言わずと知れたコンビネータ論理の教科書(?)です。 そこで算術や論理を関数で表すという、ラムダ計算でよくある話が登場するのですが、自然数の定義が一般的なチャーチ数と違っていて分かりにくかったので、検算用のコードを書きました。 ふつうのチャーチ数では、zero f x = x = KIfx、one f x = f x = Ifx、two f x = f (f x) = SBIfx と定義しますが、zero = I、one = V(KI)I、two = V(KI)(V(KI)I) という定義になってます。 こんな感じ(↓)で遊べます。 Main> toInt $ exp five (multi three two) 15625 Main> toBool $ greater (multi two five) (multi three t
