Functional programming 有人能解释一下这个逆转列表元素的OCaml函数是如何工作的吗?

Functional programming 有人能解释一下这个逆转列表元素的OCaml函数是如何工作的吗?,functional-programming,ocaml,Functional Programming,Ocaml,我有一个OCaml函数,我从帖子中得到: 我测试了这个,它显然有效,但我不明白为什么。在main函数中,当定义rev_acc时,它表示它只接受参数acc。但是,当使用两个参数调用函数时。为什么我们可以这样做 还有,为什么我们说让rec rev_acc acc=function,“=function”是什么意思,为什么我们不使用匹配?我假设这与不必指定某些参数有关;我确实记得在课程的最后一部分中有一些关于这方面的内容,只是简单地介绍了一下。这和咖喱有关吗 抱歉,如果这些是愚蠢的问题;我对函数式编程

我有一个OCaml函数,我从帖子中得到:

我测试了这个,它显然有效,但我不明白为什么。在main函数中,当定义
rev_acc
时,它表示它只接受参数
acc
。但是,当使用两个参数调用函数时。为什么我们可以这样做

还有,为什么我们说
让rec rev_acc acc=function
,“=function”是什么意思,为什么我们不使用匹配?我假设这与不必指定某些参数有关;我确实记得在课程的最后一部分中有一些关于这方面的内容,只是简单地介绍了一下。这和咖喱有关吗

抱歉,如果这些是愚蠢的问题;我对函数式编程相当陌生,如果这还不明显的话


非常感谢您的帮助。谢谢。

Ocaml有一个特殊的
函数
语法,它接受一个隐式参数,并自动将其插入匹配表达式中

程序中的
rev_acc
函数是使用
函数定义的

let rec rev_acc acc = function
  | [] -> acc
  | hd::tl -> rev_acc (hd::acc) tl
这相当于

let rec rev_acc acc xs =
  match xs with
    | [] -> acc
    | hd::tl -> rev_acc (hd::acc) tl 

如上所述,每个版本的
rev_acc
都接受两个参数

Ocaml有一个特殊的
函数
语法,它接受一个隐式参数,并自动将其插入匹配表达式中

程序中的
rev_acc
函数是使用
函数定义的

let rec rev_acc acc = function
  | [] -> acc
  | hd::tl -> rev_acc (hd::acc) tl
这相当于

let rec rev_acc acc xs =
  match xs with
    | [] -> acc
    | hd::tl -> rev_acc (hd::acc) tl 

上面,每个版本的
rev_acc
都接受两个参数

您是对的,rev_acc是一个接受一个参数的函数。但它随后返回一个带有另一个参数的函数。所以当你写作的时候

rev_acc [] l
实际发生的是

let unnamed_function = rev_acc []
in
unnamed_function l

你是对的,rev_acc是一个接受一个参数的函数。但它随后返回一个带有另一个参数的函数。所以当你写作的时候

rev_acc [] l
实际发生的是

let unnamed_function = rev_acc []
in
unnamed_function l
从Ocaml派生的F#具有做相同事情的相同关键字。从Ocaml派生的F#具有做相同事情的相同关键字。