1

全て、

ML式に変換する必要のある型式は次のとおりです。

int -> (int*int -> 'a list) -> 'a list

これが2つの引数を取るカリー化スタイルの式であることがわかりました。1番目の引数=型intおよび2番目の引数=前のint値を2回受け取り、任意の型のリストを返す関数

intを取り、戻るような関数を理解するのに苦労してい'a listます。

私はMLを初めて使用するため、これは他の人にとっては些細なことかもしれませんが、明らかに私ではありません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

intと関数を取得しますint*int -> 'a list。を返すことになっています'a list。したがって、必要なのは、(x、x)で取得した関数(xは取得したint)を呼び出し、その結果を返すことだけです。それで

fun foo x f = f (x,x)

タイプがで可能な関数はこれだけではないことに注意してくださいint -> (int*int -> 'a list) -> 'a list。たとえば、関数fun foo x f = f (x, 42)ともfun foo x f = f (23, x)そのタイプになります。

編集:

タイプを正確に一致させるには、タイプアノテーションを追加して、fの戻りタイプを制限します。

fun foo x (f : int*int -> 'a list) = f (x,x)

ただし、それを行う本当の理由はないことに注意してください。このバージョンは、リストを返す関数のみを受け入れることを除いて、以前のバージョンとまったく同じように動作します。

于 2010-07-15T17:51:09.167 に答える