这个用于计算平均值和标准差的代码如何工作?

时间:2017-09-03 01:35:16

标签: ocaml

我不太了解以下代码,它会计算数字列表的平均值和标准差:

let stats l =
  let rec helper rest n sum sum_squares =
    match rest with
    | [] -> let nf = float_of_int n in
      (sum /. nf, sqrt (sum_squares /. nf))
    | h :: t ->
      helper t (n+1) (sum+.h) (sum_squares +. (h*.h)) in
  helper l 0 0.0 0.0;;

例如:

let (mean, sd) = stats [1.; 2.; 3.; 4.; 5.];;

口译员回应

val mean : float = 3.
val sd : float = 3.3166247903554

      helper t (n+1) (sum+.h) (sum_squares +. (h*.h)) in
  helper l 0 0.0 0.0;;

inhelper l 0 0.0 0.0在这里意味着什么?

感谢。

1 个答案:

答案 0 :(得分:1)

该定义分为如此

let stats l =
    let rec helper rest n sum sum_squares =
        (* Definition of helper *)
    in
    helper l 0 0.0 0.0

关键字in本身并不意味着什么。它与let一致。您所谈论的in与定义let的{​​{1}}一致。所以在英语中,它将 helper let定义为以下 helper in

表达式helper l 0 0.0 0.0是对helper l 0 0.0 0.0定义的helper函数的调用。

所以在更简单的英语中,它说“将助手定义为以下函数,然后使用参数let调用助手。”