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

Sof*_*mur 2 syntax ocaml coding-style function

我看到一些实现如下:

let rec fact =
  fun n ->
    if n <= 0 then 1 else n * fact (n - 1)
Run Code Online (Sandbox Code Playgroud)

另一个实现是:

let rec fact n =
  if n <= 0 then 1 else n * fact (n - 1)
Run Code Online (Sandbox Code Playgroud)

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

Jef*_*eld 6

这些定义是等价的.符号

let rec f a b c = <expr>
Run Code Online (Sandbox Code Playgroud)

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

let rec f = fun a b c -> <expr>
Run Code Online (Sandbox Code Playgroud)

您可以在OCaml手册的第6.7.1节 " 本地定义 "标题下找到此内容.


Bas*_*tch 5

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

第二种形式通常是出于文体方面的首选:你知道let你正在定义一个函数.在第一个,你必须阅读fun以了解这一点.