[ contents | mbh ]
Pattern matching is a very powerful tool. Although you may not realize it, patterns occur almost everywhere in Ocaml. The most straightforward way of using this concept is by inducing pattern matching:
let f i = 
  match i with
      1 -> "one"
    | 2 -> "two"
    | 3 -> "three"
    | x -> (string_of_int x)

When you are writing a function, and you need to do pattern matching on the last argument, there is a shortcut. You can automatically go into pattern matching mode for the last argument: So, this is equivalent to the above code:

let f = function
      1 -> "one"
    | 2 -> "two"
    | 3 -> "three"
    | x -> (string_of_int x)

Understanding this pointless function is important. First, by using the match keyword, you can essentially create en extended if statement. Notice how you can match specific things, like 1 and 2, and you can also match wildcards such as 'x'. In the example above, if the value of i is not 1, 2, or 3, then the value is bound to the variable 'x'. Then, x can be used freely.

The arguments to function are also patterns. This is perfectly legal:

# let factorial 5 = 120;;
Characters 14-21:
Warning: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
0
  let factorial 5 = 120;;
                ^^^^^^^
val factorial : int -> int = <fun>
# (factorial 5);;
- : int = 120
# (factorial 4);;
Exception: Match_failure ("", 16, -65).
Now, you can put a wildcard pattern as the argument:
let factorial x = .....

The _ Pattern