0
exception No_intersection of string
fun check_in ((m1:real, b1:real), (m2:real, b2:real)):real*real =
函數應該檢查兩行之間的交集。每對參數是斜率和y截距。如果它存在,我應該找到兩者之間的交集。SML編程幫助元組
由於某種原因,我無法看起來這樣的工作,並且一直在爲此奮鬥幾個小時。
exception No_intersection of string
fun check_in ((m1:real, b1:real), (m2:real, b2:real)):real*real =
函數應該檢查兩行之間的交集。每對參數是斜率和y截距。如果它存在,我應該找到兩者之間的交集。SML編程幫助元組
由於某種原因,我無法看起來這樣的工作,並且一直在爲此奮鬥幾個小時。
實數在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
。
我看不到,你如何輸入你的線。通常,一條線用兩點或一個點和一個矢量來描述;在任何情況下都是四個標量值。但是,您一共有四個值。 PS:作業? – Matthias 2012-03-15 07:28:46
@Matthias:'m'是漸變,'b'是y-截距。 – 2012-03-15 08:23:19
@NickBarnes:當然!我是盲人。 – Matthias 2012-03-15 08:25:43