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の適用順序がなければ規定されません。fOCaml は純粋な言語ではないので、順序を指定する必要があります (fが最初にリストの先頭で呼び出され、以下同様に再帰的に呼び出されます)。

于 2013-04-20T20:36:48.150 に答える