# OCaml as she is wrote
OCaml is not a mainstream language, and the syntax and semantics you
are used to from more conventional languages may not work. This page
acts as a phrase book explaining how to translate idioms from more
common languages to OCaml.
## If you know how to do this in Standard ML
fun fact n = if n = 0 then 1 else n * fact (n-1)
### Then do it like this in OCaml
let rec fact n = match n with
| 0 -> 1
| n -> n * (fact (n - 1))
## If you know how to do this in APL
fact←{×/⍳⍵}
### Then do it like this in OCaml
let rec fact n = match n with
| 0 -> 1
| n -> n * (fact (n - 1))
## If you know how to do this in Brainfuck
[->+<]>[[>+>+<<-]>>-<[-<+>]>[-<+>]<]<[->+<]<
[[->>[-<+>>+<]>[-<+>]<<<]>>[-]<<<]>>[-<<+>>]<<
### Then do it like this in OCaml
let rec fact n = match n with
| 0 -> 1
| n -> n * (fact (n - 1))
## If you know how to do this in Futhark
def fact n = reduce (*) 1 (iota n)
### Then do it like this in OCaml
let rec fact n = match n with
| 0 -> 1
| n -> n * (fact (n - 1))
## If you know how to do this in Emacs Lisp
(defun fact (n) (if (= n 0) 1 (* n (fact (- n 1)))))
### Then do it like this in OCaml
let rec fact n = match n with
| 0 -> 1
| n -> n * (fact (n - 1))