为什么在OCaml的List.map中有一个let?

时间:2013-04-20 20:28:23

标签: syntax functional-programming ocaml

在OCaml 3.12.1中,List.map编写如下:

let rec map f = function
    [] -> []
  | a::l -> let r = f a in r :: map f l

我希望最后一行写成| a::l -> f a :: map f l,但相反,有一个看似无用的let绑定。为什么呢?

1 个答案:

答案 0 :(得分:9)

我相信它可以保证地图的功能应用顺序。 OCaml中简单表达式的评估顺序未指定,因此如果没有letf对列表元素的应用顺序将是未指定的。由于OCaml不是纯语言,因此您真的希望指定顺序(首先在列表的头部调用f,依此递归)。