预计此表达式的类型为“double”,但此处的类型为“unit”

时间:2018-01-13 17:34:36

标签: f#

我有一个整数数组,想要做以下操作:

s += array(index+1) - array(index)

所以,我尝试了下面的内容:

let mutable s =0
for i in 0 .. slen-1 do
s <- series.[i+1] - series.[i] + s

但我发错了:

  

预计此表达式具有类型       '双'但这里有类型       '单元'

更新

完整代码

let series = [|30;21;29;31;40;48;53;47;37;39;31;29;17;9;20;24;27;35;41;38;
          27;31;27;26;21;13;21;18;33;35;40;36;22;24;21;20;17;14;17;19;
          26;29;40;31;20;24;18;26;17;9;17;21;28;32;46;33;23;28;22;27;
          18;8;17;21;31;34;44;38;31;30;26;32|]

let initialTrend series slen : double=
    let mutable s = 0
    for i in 0 .. slen-1 do
    s <- series.[i+1] - series.[i] + s

1 个答案:

答案 0 :(得分:6)

嗯,你告诉该函数会返回一个double,错误信息告诉你它没有返回任何内容,这是正确的。

要么删除返回类型:

let initialTrend series slen : unit =
  let mutable s = 0
  for i in 0 .. slen-1 do
    s <- series.[i+1] - series.[i] + s

或更改功能的工作方式:

let initialTrend (series: _ list) slen : double=
    let mutable s = 0
    for i in 0 .. slen-1 do
        s <- series.[i+1] - series.[i] + s
    float s

但是,看看你最近的问题,你仍然坚持可变性。我建议在这里使用更高阶的函数:

let initialTrend (series: float [])  : double =
    Array.pairwise series |> Array.fold (fun s (x0, x1) -> x1 - x0 + s) 0.