2012-03-15 73 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