这个表达式预计有'double'类型,但这里有'unit'类型

Has*_*sef 1 f#

我有一个整数数组,并希望执行以下操作:

s += array(index+1) - array(index)
Run Code Online (Sandbox Code Playgroud)

所以,我试过以下:

let mutable s =0
for i in 0 .. slen-1 do
s <- series.[i+1] - series.[i] + s
Run Code Online (Sandbox Code Playgroud)

但我发了一个错误:

这个表达式预计有'double'类型,但这里有'unit'类型

UPDATE

完整的代码

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
Run Code Online (Sandbox Code Playgroud)

Gus*_*Gus 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
Run Code Online (Sandbox Code Playgroud)

或改变功能的工作方式:

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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 好的,我添加了一个例子,使用``fold``. (2认同)
  • 是的,有一个可以达到这个目的的``Array.windowed``. (2认同)