我不太明白下面的代码,它计算数字列表的平均偏差和标准差:
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;;
in
和helper l 0 0.0 0.0
在这里是什么意思?
谢谢。
发布于 2017-09-03 04:00:27
这个定义被分解成如下的片段
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
与定义helper
的let
一起使用。因此,在英语中,let
helper
被定义为下面的in
helper l 0 0.0 0.0
。
表达式helper l 0 0.0 0.0
是对let
定义的helper
函数的调用。
因此,在更简单的英语中,它说:“将helper定义为以下函数,然后使用参数l 0 0.0 0.0
调用helper。”
https://stackoverflow.com/questions/46019547
复制相似问题