Reputation: 25008
Ive an array of integers, and want to do the following operation:
s += array(index+1) - array(index)
so, I tried the below:
let mutable s =0
for i in 0 .. slen-1 do
s <- series.[i+1] - series.[i] + s
but I goy an error:
This expression was expected to have type 'double' but here has type 'unit'
UPDATE
The full code
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
Upvotes: 1
Views: 147
Reputation: 26204
Well, you are telling that the function will return a double and the error message is telling you that it doesn't return anything, that's correct.
Either, remove the return type:
let initialTrend series slen : unit =
let mutable s = 0
for i in 0 .. slen-1 do
s <- series.[i+1] - series.[i] + s
or change the way the function works:
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
But, looking at your recent questions, you are still sticking to mutability. I would suggest to use a higher order function here instead:
let initialTrend (series: float []) : double =
Array.pairwise series |> Array.fold (fun s (x0, x1) -> x1 - x0 + s) 0.
Upvotes: 6