这个定义的函数怎么了?

时间:2018-07-30 11:37:02

标签: sml

任何人都可以帮忙吗? 它会发布错误

fun hypoexpo(l1:real,l2:real)=
let
val u1=uniform(0.0,1.0)
val u2=uniform(0.0,1.0)
val l=l1/(l2-l1)
if u1<0.5 then val h=~ln u2/l1
else val h=~ln u2/l2
in
h
end;

1 个答案:

答案 0 :(得分:2)

letin之间只能出现声明。 if构造不是声明语法的一部分,它是一个表达式。您只需将代码更改为以下内容即可:

fun hypoexpo(l1 : real, l2 : real) =
    let
      val u1 = uniform(0.0, 1.0)
      val u2 = uniform(0.0, 1.0)
      val l = l1/(l2-l1)
    in
      if u1 < 0.5 then ~ln u2/l1 else ~ln u2/l2
    end

您还可以从条件中排除常量部分,将最后一行更改为

~ln u2 / (if u1 < 0.5 then l1 else l2)

无论哪种方式,l似乎都未被使用。