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