2012-04-03 100 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