What is the difference between the `fun` and `function` keywords?
f#, ocaml
Solution
The semantics for this is the same as in F# (probably because F# is based on OCaml):
`function` allows the use of pattern matching (i.e. `|`), but consequently it can be passed only one argument.
function p_1 -> exp_1 | … | p_n -> exp_n
is equivalent to
fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
`fun` does not allow pattern matching, but can be passed multiple arguments, e.g.
fun x y -> x + y
When either of the two forms can be used, `fun` is generally preferred due to its compactness.
See also OCaml documentation on Functions.
Problem
Sometimes I see code like ``` let (alt : recognizer -> recognizer -> recognizer) = fun a b p -> union (a p) (b p) ``` Or like: ``` let hd = function Cons(x,xf) -> x | Nil -> raise Empty ``` What is the difference between `fun` and `function`?