1

smlnj は、デフォルトで int を使用するために op + のようなオーバーロードされた演算子を作成します。今度は、関数を real * real -> real で返したいのですが、どうすればインラインで実行できますか?

「インライン方法」とは、新しい val をバインドするようなものではないことを意味します。

fun add(x:real,y:real) = x + y;

私の記憶が正しければ、いくつかの文法により、sml が op + を real に「キャスト」するようなことを行うことができますが、実際にはどこにも見つかりません..

4

3 に答える 3

3

op+SMLを実際の対応物として入力させるにはさまざまな方法があります。

あなたが持っているコードに応じて、

  • 提案されているように、周囲の関数に型注釈を付けて、パラメーターをop+実数型にすることができます。

  • 加算関数を固定していないので(おそらく高階関数として使用するためですか?)、実際のモジュールから加算関数を渡すこともできます。Real.+

  • または、次のように注釈を付けることもできます。代わりにop+ : real * real -> real使用できることを考えると、これは本当に醜くて愚かです。Real.+しかし、それはオプションです。

于 2013-02-18T13:47:54.613 に答える
0

あなたは宣言することができます

open Real

関数を定義するスコープ内ですが、それに対して強くお勧めします。関数に型注釈を付けるのが最善の方法です。すべてのパラメーターに注釈を付ける必要はありませんが、1 つだけで十分です。この場合は、戻り値の型にも注釈を付けます。

fun add(x : real, y) = x + y

fun add(x, y) : real = x + y
于 2013-02-18T16:21:38.720 に答える
0

演算子の既定のインスタンスが値の型に必要なインスタンスでない場合は、オペランドで型注釈を使用して、目的の型を適用できます。

たとえば、

val f = fn a => a + a

タイプされますint -> int、この値

val g = fn a:real => a + a

と入力されreal -> realます。

于 2013-02-18T13:32:22.487 に答える