5

在 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绑定。为什么?

4

1 回答 1

10

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

于 2013-04-20T20:36:48.150 回答