1

我正在为分数编写一个简单的抽象数据类型,我什至无法让构造函数工作,我只是对 SML 语法非常迷茫。

signature fracs = sig

type fraction

exception zero_denominator

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

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

这是显示我正在实现的构造函数的 .sig 文件。这是我到目前为止所拥有的。我收到的错误是当我想要 int*int-> 分数时我正在做 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表示具有两个类型元素的元组AB。然而在实现中,A * B意味着两个整数之间的乘法。

你想要的是fraction从两个整数中创建一个值:

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