OCaml中这两个函数定义有何不同?

时间:2012-01-02 04:58:58

标签: function coding-style syntax ocaml

我看到一些实现如下:

let rec fact =
  fun n ->
    if n <= 0 then 1 else n * fact (n - 1)

另一个实现是:

let rec fact n =
  if n <= 0 then 1 else n * fact (n - 1)

有人能告诉我这两种风格之间是否有任何区别?

2 个答案:

答案 0 :(得分:6)

这些定义是等效的。符号

let rec f a b c = <expr>

是一种方便的写作方式(语法糖):

let rec f = fun a b c -> <expr>

您可以在section 6.7.1 of the OCaml manual标题本地定义标题下找到此内容。

答案 1 :(得分:5)

语法糖没有区别。第二种形式被定义为等同于第一种形式。

第二种形式通常是出于文体方面的首选:你知道你在定义一个函数的let行。在第一个中,您必须阅读fun才能理解这一点。