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款有什么区别?
我已经看到了一些实现如下: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款有什么区别?
这些定义是等价的。记号
let rec f a b c = <expr>
是写的一个方便的方式(对语法糖):
let rec f = fun a b c -> <expr>
你可以找到在此section 6.7.1 of the OCaml manual描述,标题本地定义下。
除了语法糖之外没有区别。第二种形式被定义为等同于第一种形式。
第二种形式通常因文体原因而更受欢迎:您在let
的行上知道您正在定义函数。在第一个中,你必须阅读fun
才能理解这一点。
(我不使用OCaml)应用匹配器的能力如何? – 2012-01-02 05:21:24
然后您将使用'function'或'match'关键字。 – 2012-01-02 05:23:01