SML:为什么返回类型是unit?

SML:为什么返回类型是unit?,sml,smlnj,Sml,Smlnj,因此,我编写了一个函数(我将简要描述它以避免混淆) 我没有得到返回类型。我想返回一个真正喜欢的d&k。为什么它是单位??请发布一篇文章。我能想到的在代码中填写…的所有方法要么会导致结果类型real,要么会导致类型错误。好吧,我更新了它。但是--你没有将其更新为。当我试图运行您发布的代码时,它会抛出几个关于未绑定变量的错误。在任何情况下--while循环的类型为单元。在SML中很少需要它。是的,虽然被设计为重复做一个动作,而不是计算一个值。它是SML命令式子语言的一部分。您给出的代码看起来更像Ja

因此,我编写了一个函数(我将简要描述它以避免混淆)


我没有得到返回类型。我想返回一个真正喜欢的d&k。为什么它是单位??

请发布一篇文章。我能想到的在代码中填写
的所有方法要么会导致结果类型
real
,要么会导致类型错误。好吧,我更新了它。但是--你没有将其更新为。当我试图运行您发布的代码时,它会抛出几个关于未绑定变量的错误。在任何情况下--
while
循环的类型为
单元
。在SML中很少需要它。是的,
虽然
被设计为重复做一个动作,而不是计算一个值。它是SML命令式子语言的一部分。您给出的代码看起来更像Java,而不是惯用的SML。您的函数试图计算什么?这可能有助于其他人就替代方法提出建议。
   fun function1 (l, a1,a2, suma, b2, sumb, d)   = 
   while(a1<a2 andalso k>d) do
     let 
       
       val k = Real.fromInt(a2-a1)
       val suma = suma - Real.fromInt(List.nth(l, a1))  
       val sumb = sumb - Real.fromInt(List.nth(l, b2)) 
       val a1 = a1+1
       val b2 = b2-1
   in  
       if suma<0.0 andalso ( (~sumf)/(N*k) )>1.0 andalso k>d
           then  k
       else if sumb<0.0 andalso ((~sumb)/(N*k))>1.0 andalso k>d
           then  k
       else d   
   end;
val function1 = fn : int list * int * int * real * int * real * real -> unit