2012-01-02 40 views
2

我已经看到了一些实现如下: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款有什么区别?

回答

6

这些定义是等价的。记号

let rec f a b c = <expr> 

是写的一个方便的方式(对语法糖):

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

你可以找到在此section 6.7.1 of the OCaml manual描述,标题本地定义下。

5

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

第二种形式通常因文体原因而更受欢迎:您在let的行上知道您正在定义函数。在第一个中,你必须阅读fun才能理解这一点。

+0

(我不使用OCaml)应用匹配器的能力如何? – 2012-01-02 05:21:24

+1

然后您将使用'function'或'match'关键字。 – 2012-01-02 05:23:01

相关问题