F# 此表达式的类型应为';双倍';但是这里有类型';单位';

F# 此表达式的类型应为';双倍';但是这里有类型';单位';,f#,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 设可变s=0 因为我在0。。slen-1 do s好的,您告诉我们函数将返回一个double,错误消息告诉您它不返回任何内容,这是正确的 或者,删除返回类型: let initialTrend se

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

s += array(index+1) - array(index)
因此,我尝试了以下方法:

let mutable s =0
for i in 0 .. slen-1 do
s <- series.[i+1] - series.[i] + s
设可变s=0
因为我在0。。slen-1 do

s好的,您告诉我们函数将返回一个double,错误消息告诉您它不返回任何内容,这是正确的

或者,删除返回类型:

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

好的,您告诉我们函数将返回一个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 slen=10
let series=[|0..10 |]
我没有得到这个错误。你能分享一个吗?请参阅更新的问题plsWith
let slen=10
let series=[|0..10 |]
我不知道这个错误。你能分享一个吗?请看更新的问题plsOK,我添加了一个例子,使用了
折叠
。谢谢,但是如果我不想要
成对
,假设我想处理每个索引及其后的第四个元素,是否有更高的函数!是的,有
Array.windowed
可以达到这个目的。谢谢,这对我来说很好
series |>Array.windowed 5 |>Array.fold(fun s x->(x |>Array.rev |>Array.head)-(x |>Array.head)+s)0 |>float
关于让函数返回
double
的第二个建议,但是为什么要将
int
转换为
float
,而不是
double
?这行吗?好的,我添加了一个例子,使用了一个
折叠
。谢谢,但是如果我不想要
成对
,假设我想要处理每个索引和它后面的第四个元素,那么有更高的函数吗!是的,有
Array.windowed
可以达到这个目的。谢谢,这对我来说很好
series |>Array.windowed 5 |>Array.fold(fun s x->(x |>Array.rev |>Array.head)-(x |>Array.head)+s)0 |>float
关于让函数返回
double
的第二个建议,但是为什么要将
int
转换为
float
,而不是
double
?这行得通吗?
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.