2

データ型を使用してSMLにチャーチ数を実装する必要がある割り当てがあります:datatype'a Church = C of(' a-'a)*' a->'a

関数create:int->'a Churchと関数churchTointを作成する必要があります。これまでのところ、次のコードがあります。

datatype 'a church = C of ('a -> 'a) * 'a -> 'a
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 cn = cn (fn x => x + 1) 0;

私はかなり近いことを知っています。これを正しく実装するのを手伝ってもらえますか?ありがとう

4

1 に答える 1

2

あなたは正しいです、あなたはかなり近いです。ChurchToInt関数には2つの小さな間違いしかありません。

  1. あなたは教会の数字を開梱していません。cnつまり、引数を関数のように扱いますが、関数自体ではなく、関数を含むchurchToIntものを受け入れる必要があります。したがって、これをに変更して、パターンマッチングを介して関数を解凍します。C fun churchToInt (C cn) =

  2. カレースタイルを使用して関数に2つの引数を適用しCていますが、タプルを取る関数を含むように定義されています。したがって、の代わりにcn (fn x => x+1) 0、と記述しcn ((fn x => x+1), 0)ます。

これらの2つの変更により、コードは正常に機能します。

于 2010-09-24T11:00:07.473 に答える