SML で教会の数字を作成する課題があります。私は周りを見回しましたが、私が間違っていることを見つけることができません。目標は、int を取り、教会の数字を返す関数を作成することです。これは、データ型 'a 数字 = Num of ('a -> 'a) -> 'a -> 'a (私の先生によって事前定義されています) として定義されます。 . 次に、教会の数字を取り、int を返す 2 番目の関数を作成します。
コードを含む以前の投稿を見ました:
val ZERO = C(fn (f,x) => x)
fun subCreate 0 (f,x) = x
| subCreate n (f,x) = f (subCreate (n-1) (f,x))
fun create n = C(fn (f,x) => subCreate n (f,x));
fun churchToInt (c, cn) = cn ((fn x => x+1), 0) 0;
しかし、これは機能せず、値の制限のために一般化されていないエラー型変数がダミー型にインスタンス化されます。
コードを使用したとき:
val zero = fn s => fn x => x;
(ゼロを定義するため)そして次に
val next = fn n => fn s => fn x => (f ((n s) x));
(反復関数または再帰関数を設定する前に、ゼロをインクリメントできるかどうかをテストするためだけに)、同じエラーが発生しました。私はこの問題に何時間も費やしましたが、教会の数字を出すことができませんでした. 誰かが私を正しい方向に向けることができますか?