【问题标题】:SML programming help tuplesSML 编程帮助元组
【发布时间】:2012-03-16 01:30:22
【问题描述】:
exception No_intersection of string

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

该函数应该检查两条线之间的交叉点。每对参数是一个斜率和一个 y 截距。如果存在,我应该找到两者之间的交集。

由于某种原因,我无法使这项工作看起来有效,并且已经为此苦苦挣扎了好几个小时。

【问题讨论】:

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

标签: sml smlnj


【解决方案1】:

实数在 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) option

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多