有时我会看到类似的代码
let (alt : recognizer -> recognizer -> recognizer) =
fun a b p -> union (a p) (b p)
Run Code Online (Sandbox Code Playgroud)
或者像:
let hd = function
Cons(x,xf) -> x
| Nil -> raise Empty
Run Code Online (Sandbox Code Playgroud)
fun和之间有什么区别function?
Rus*_*Cam 38
其语义与F#中的相同(可能是因为F#基于OCaml):
function允许使用模式匹配(即|),但因此它只能传递一个参数.
function p_1 -> exp_1 | … | p_n -> exp_n
Run Code Online (Sandbox Code Playgroud)
相当于
fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
Run Code Online (Sandbox Code Playgroud)fun 不允许模式匹配,但可以传递多个参数,例如
fun x y -> x + y
Run Code Online (Sandbox Code Playgroud)当可以使用两种形式中的任何一种时,fun由于其紧凑性,通常是优选的.
另请参见有关函数的OCaml文档.
Bri*_*ian 21
我想的方式
function patterns
Run Code Online (Sandbox Code Playgroud)
是简写
(fun x -> match x with patterns)
Run Code Online (Sandbox Code Playgroud)
其中'模式'是例如
| Some(x) -> yadda | None -> blah
Run Code Online (Sandbox Code Playgroud)
(和
fun args -> expr
Run Code Online (Sandbox Code Playgroud)
是你如何定义一个lambda.)
Russ Cam的回答是正确的.
这是在OCaml列表上发布的一篇关于它的帖子
function只允许一个参数但允许模式匹配,而fun定义函数是更通用和灵活的方式.
除非有充分的理由使用功能,否则我通常会玩得很开心.
你可以在你发布的代码中看到这个,fun声明带有3个参数,function声明在它的输入上进行模式匹配