0

プログラミング言語の試験の復習をしているときに、標準 ML セクションの型推論の問題がいくつかあります。それらのほとんどは、頭の中で型推論を行うことで解決できます。私はそれがかなり得意ですが、1 つの問題があります。私を困惑させます。

次のタイプの関数を作成する必要があります。

('a -> ('b -> 'c)) -> ('a -> 'b) -> ('a -> 'c)

したがって、私の頭の中には、f と g という 2 つの引数を持つ関数が必要です。どちらも引数 x を取りますが、引数 x をこの関数に追加することはできません。なぜなら、この関数は 2 つの引数しかとらないためです。そのため、関数をパイプライン化するために、o 演算子を使用してこの関数を作成する必要があります。

したがって、f は引数を取り、関数を返します g は引数を取り、値を返します。次に、関数全体が値を取り、値を返します。

これらのルールを暗示するために、o 演算子のみを使用して f と g を適用する方法がわかりません。

どんな助けでも大歓迎です:)ありがとう、シアラン

4

1 に答える 1

1

すでに述べたように、2 つの引数を持つ関数を作成する必要があります。

fun my_function f g = body

どこf : 'a -> 'b -> 'cg : 'a -> 'bbody : 'a -> 'c

bodytype を持っているので'a -> 'c、次のように書くことができます。

body = fn x => body'

どこbody'にタイプ'cとがありx : 'aます。

f x : 'b -> 'cとを観察し、g x : 'b型の関数と型'b -> 'cの値がある場合、関数を引数に適用すること'bで型の値を簡単に作成できます: 。'c(f x) (g x)

上記により、次のことがわかります。

fun my_function f g = fn x => (f x) (g x)

または、代わりに、x取得した定義の左側に移動します。

fun my_function f g x = f x (g x)

ところで、組み合わせ論理に精通している場合は、結果の関数がコンビネーターを表していることに気付くでしょうS

于 2016-12-05T12:35:13.290 に答える