3

SMLで型を定義することは、それほど役に立ちません。

type point = int * int
val origin : point = (0, 0)

しかし、私は簡単にint * intメソッドの入力に使用できますね。次のようなもっと面白いことができるように見えるデータ型と比較して:

datatype Point = PlanePoint of (int * int) | SpacePoint of (int * int * int)
val origin : Point = SpacePoint(0, 0, 0)

好奇心から、あなたが本当にtype定義しなければならない状況は何ですか?

4

2 に答える 2

3

その理由は主に型安全性です。簡単な例で説明しようと思います。

real * real たとえば、次のように表される2つのタイプを使用するモジュールと、勾配とay切片で表される線があるとします。lies_on_lineここで、ポイントとラインを取り、ポイントがライン上にあるかどうかに関係なくブール値を返すような関数を作成している場合、署名には2つの選択肢があります。

val lies_on_line : (int * int) * (int * int) -> bool

オード

val lies_on_line : point * line -> bool 

2番目の例では間違いを犯しにくくなっていることは明らかです。

また、モジュールにとってはより多くの利点がありますが、型に名前を付けると、その型を使用するコードを変更せずに(モジュールを介して間接的に)その表現を変更できます。

于 2013-03-13T21:58:26.570 に答える
2

問題のドメインのコンテキストでタイプのエイリアスを定義することは理にかなっています。そうすれば、より関連性が高く意味のあるタイプの観点からデザインを考えることができます。

たとえば、ワードプロセッサプログラムを作成している場合、次のようなタイプがあります。

type Word = string
type Sentence = Word list

これは、文字列や文字列リストよりも理にかなっている場合があります。

于 2013-03-14T18:20:35.280 に答える