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