1

分数の単純な抽象データ型を作成していますが、コンストラクターを機能させることさえできません。SML 構文で非常に迷っています。

signature fracs = sig

type fraction

exception zero_denominator

(* constructor *)
val // : int * int -> fraction

/*******************************************************************************************************************************************/

これは、実装しているコンストラクターを示す .sig ファイルです。これが私がこれまでに持っているものです。私が受け取ったエラーは、int*int-> Fraction が必要なときに int*int* -> int を実行しているということです。私はそれが言っていることとすべてを知っていますが、私はそれを実現することはできません.

structure fracs :> fracs = struct

abstype fraction = frac of int * int
with

exception zero_denominator;
(**********************************)

(*constructor*)
infix 8 //;

fun num // den = if den = 0 then raise zero_denominator 

else
    num * den;

end;(*end ADT*)

end;(*end struct*)
4

1 に答える 1

2

関数シグネチャでは、型とA * B型の 2 つの要素を持つタプルを意味します。ただし、実装では、2 つの整数間の乗算を意味します。ABA * B

必要なのはfraction、2 つの整数から値を作成することです。

fun num // den = 
    if den = 0 then raise zero_denominator else frac(num, den)
于 2012-04-03T07:04:02.100 に答える