2012-04-03 149 views
1

我正在为分数编写一个简单的抽象数据类型,并且我甚至无法让构造函数工作,我只是在SML语法上迷失了方向。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*) 

回答

2

在函数签名,A * B指具有的类型和AB两个元素的元组。然而在实施中,A * B意味着两个整数之间的乘法。

你需要的是从两个整数做一个fraction值:

fun num // den = 
    if den = 0 then raise zero_denominator else frac(num, den) 
+0

哦!我明白了,非常感谢! – user1309382 2012-04-03 16:22:18