0

タイプ「ポイント」の要素を返す関数を作成しようとしています。

type point = {x : int, y : int};
fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2)));

しかし、SMLNJは、結果も「ポイント」タイプである必要があるという私の意図を理解していないようです。

use "test1.sml";
[opening test1.sml]
type point = {x:int, y:int}
val pointadd = fn : point * point -> int * int
4

2 に答える 2

2

pointはレコード型ですが、代わりにタプルを返しています。

このようなものはどうですか:

fun pointadd (p1: point, p2: point) =
    { x = #x p1 + #x p2,
      y = #y p1 + #y p2 };

戻り値の型に型ガードを追加して、型をより適切にすることができますが、同等です。

fun pointadd (p1: point, p2: point) : point =
    { x = #x p1 + #x p2,
      y = #y p1 + #y p2 };
于 2009-07-07T06:17:58.097 に答える
0

私のSMLの時代からかなりの時間が経ちましたが、型システムは型署名を印刷するときに定義された型を自動的に解決しません。あなたはこのようなことを試すことができます:

fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2))): point
于 2009-07-07T05:54:15.337 に答える