I think this is the first time I see anyone like the OCaml syntax.
Pattern matching for function heads is magical. Thus sayeth the Erlang fanboi.
This allows you to easily create special logic for corner cases and is generally extremely useful.
gcd(a, 0) = a
gcd(a, b) = gcd(b, a mod b)
That, in effect, is what pattern matching + function heads gives you. You can copy that function directly into ML or Erlang, modulo a couple tiny bits of syntax. gcd(A, 0) -> A;
gcd(A, B) -> gcd(B, A rem B).