F#将浮点列表合并为浮点

F#将浮点列表合并为浮点,f#,F#,我是F#的新手,我正在努力想如何将浮点列表中的数字组合成一个浮点 如果我有名单 let floatList=[9.0;8.0;3.0] 我想要一个返回值为983.0浮点值的函数。我该如何解决这个问题?这是一种解决方法 let floatList = [ 9.0; 8.0; 3.0 ] let rec loop mult list = match list with | head :: tail -> (mult * head) + (loop (mult / 10.) ta

我是F#的新手,我正在努力想如何将浮点列表中的数字组合成一个浮点

如果我有名单

let floatList=[9.0;8.0;3.0]

我想要一个返回值为983.0浮点值的函数。我该如何解决这个问题?

这是一种解决方法

let floatList = [ 9.0; 8.0; 3.0 ]
let rec loop mult list =
    match list with
    | head :: tail -> (mult * head) + (loop (mult / 10.) tail)
    | [] -> 0.

let mult = 10. ** float ((List.length floatList) - 1) // len 1 = 1. len 2 = 10. len 3 = 100
let result = loop mult floatList
printfn "%f" result

rev
mapi
(带索引的映射)和
sum
函数

let digits = [| 9.0; 8.0; 3.0 |]
let result = 
    Array.rev digits 
    |> Array.mapi (fun i x -> x * (10.0 ** float i)) 
    |> Array.sum

printfn "%f" result
因为数组可以返回它的长度而无需迭代集合,所以可以删除“反转”,并根据索引和长度计算幂的偏移量

let digits = [| 9.0; 8.0; 3.0 |]

let result = 
  Array.mapi (fun i x -> x * (10.0 ** float (digits.Length - i))) digits
  |> Array.sum

printfn "%f" result

浏览列表,将之前累积的数字乘以10,然后将列表中的当前元素相加:

((9 * 10) + 8) * 10 + 3 = 983
在保存“累加器”的同时查看列表的一种简便方法是:


对于数组,您是正确的,但是对于列表,计算长度确实是O(n)检查
floatList
|> List.fold (fun acc n -> acc*10 + n) 0