2012-03-15 99 views
0
exception No_intersection of string 

fun check_in ((m1:real, b1:real), (m2:real, b2:real)):real*real = 

函數應該檢查兩行之間的交集。每對參數是斜率和y截距。如果它存在,我應該找到兩者之間的交集。SML編程幫助元組

由於某種原因,我無法看起來這樣的工作,並且一直在爲此奮鬥幾個小時。

+0

我看不到,你如何輸入你的線。通常,一條線用兩點或一個點和一個矢量來描述;在任何情況下都是四個標量值。但是,您一共有四個值。 PS:作業? – Matthias 2012-03-15 07:28:46

+0

@Matthias:'m'是漸變,'b'是y-截距。 – 2012-03-15 08:23:19

+0

@NickBarnes:當然!我是盲人。 – Matthias 2012-03-15 08:25:43

回答

1

實數在SML中不是相等類型,所以(m1-m2) = 0是一個類型錯誤。

這樣做的原因是,浮點表示的有限精度由於舍入誤差得到意想不到的結果(例如(1.0/7.7)*7.7 = 1.0將返回false)。您可以使用Real庫中的==運算符(即Real.==(m1-m2,0)(或者僅爲Real.==(m1,m2)))來解決此問題。但請記住,它可能是不可靠的。

的第二個問題是,根據返回類型,你的函數應該返回一個值,而不是打印它。您只需在else條款中說明返回值,即只需用(x,y)替換print((x,y))即可。

對於它的價值,如果可以的話,我會避免使用異常;他們有點違背函數式編程的思想。請嘗試返回(real*real) option