SML编程帮助元组

SML编程帮助元组,sml,smlnj,Sml,Smlnj,该函数用于检查两条直线之间的交点。每对参数都是斜率和y截距。我应该找到两者之间的交叉点,如果它存在的话 出于某种原因,我无法让自己看起来像是在工作,为此我已经挣扎了好几个小时 real在SML中不是相等类型,因此(m1-m2)=0是一个类型错误 原因是,由于舍入错误,浮点表示的有限精度可能会产生意外结果(例如,(1.0/7.7)*7.7=1.0将返回false)。您可以通过使用Real库中的=操作符来解决这个问题,即Real.==(m1-m2,0)(或者只使用Real.==(m1,m2))。但请

该函数用于检查两条直线之间的交点。每对参数都是斜率和y截距。我应该找到两者之间的交叉点,如果它存在的话


出于某种原因,我无法让自己看起来像是在工作,为此我已经挣扎了好几个小时

real在SML中不是相等类型,因此
(m1-m2)=0
是一个类型错误

原因是,由于舍入错误,浮点表示的有限精度可能会产生意外结果(例如,
(1.0/7.7)*7.7=1.0
将返回
false
)。您可以通过使用
Real
库中的
=
操作符来解决这个问题,即
Real.==(m1-m2,0)
(或者只使用
Real.==(m1,m2)
)。但请记住,它可能不可靠

第二个问题是,根据返回类型,函数应该返回一个值,而不是打印它。这里只需在
else
子句中声明返回值,即只需将
print((x,y))
替换为
(x,y)


无论如何,如果可以的话,我会避免使用异常;它们有点违背函数式编程的思想。请尝试返回一个
(real*real)选项

我看不出您是如何输入行的。通常,一条直线由两点或一个点和一个向量来描述;在任何情况下,都有四个标量值。但是,您总共有四个值。PS:作业?@Matthias:
m
是梯度,
b
是y-截距。@NickBarnes:当然!我是瞎的。
exception No_intersection of string

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