有人可以解释这个反转列表元素的OCaml函数是如何工作的吗?

ias*_*uff 0 ocaml functional-programming

我有一个OCaml函数,我从帖子中获得:在Ocaml中列出逆转

let rev_list l =
      let rec rev_acc acc = function
        | [] -> acc
        | hd::tl -> rev_acc (hd::acc) tl
      in 
      rev_acc [] l
Run Code Online (Sandbox Code Playgroud)

我测试了这个,它显然有效,但我不明白为什么.在main函数中,在定义时rev_acc,它表示它只接受参数acc.但是,然后用两个参数调用该函数.为什么我们允许这样做?

另外,为什么我们说let rec rev_acc acc = function,"=函数"是什么意思,为什么我们不使用匹配?我假设这与不必指定某些参数有关; 我确实在课程的最后部分记住了一些内容,这只是简单介绍的内容.它与currying有什么关系吗?

对不起,如果这些都是愚蠢的问题; 如果不是很明显的话,我对函数式编程比较陌生.

任何帮助是极大的赞赏.谢谢.

Tha*_*you 5

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

rev_acc程序中的函数是使用function

let rec rev_acc acc = function
  | [] -> acc
  | hd::tl -> rev_acc (hd::acc) tl
Run Code Online (Sandbox Code Playgroud)

这相当于

let rec rev_acc acc xs =
  match xs with
    | [] -> acc
    | hd::tl -> rev_acc (hd::acc) tl 
Run Code Online (Sandbox Code Playgroud)

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