2009-04-14 311 views
3

我創建的有理數(INT * INT)的結構及我的功能之一是:如何SML(如鑄件)強迫型

fun diff ((n, d), (n', d')) = let val (top, bot) = sum ((n, d), (~n', d')) 
            in 
            (top/gcd(top, bot), bot/gcd(top, bot)) 
            end 

GCD給了我最大的共同點,所以我不會以2/8結束,而應該是1/4。 gcd使用mod來查找gcd,所以它返回一個int。但是我不能將表達式與分隔符一起鍵入爲int。當我嘗試在diff聲明的末尾添加: int * int時,它給了我一個表達式real * real和int * int不匹配的類型錯誤。

如何強制整數除法或將表達式轉換爲整數?如果兩者都可能,哪一個更好?

回答

5

是的,你使用的是錯誤的操作符。 /是浮點除法運算符。 div(如D.Shawley所述)是整數除法運算符。 div在這種情況下是正確的,因爲你正在分割兩個整數並且想要一個整數。

2

SML是否有div運營商?自從我玩過ML以來已經有好幾年了,但它似乎是一種強制整數除法的非常標準的方法。