Le fichier pgcd.ml donne une solution, dont est extraite la fonction pgcd suivante :

let rec pgcd u v =
  if v = 0 then
    u
  else
    pgcd v (u mod v)
;;

Du point de vue du langage, on remarque que les fonctions ne sont pas récursives par défaut : il faut introduire une fonction récursive par let rec.

On remarque aussi que OCaml favorise l'écriture à l'aide de fonctions récursives (ici terminales, i.e. l'appel récursif est la dernière chose que l'on fait dans le corps de la fonction) par rapport aux boucles. Comparons avec un codage plus traditionnel à l'aide d'une boucle while.

let pgcd u v =
  let ur = ref u and vr = ref v in
  while
 !vr <> 0 do
    let
 x = !vr in
    vr := !ur mod !vr ;
    ur := x
  done ;
  !ur

C'est moins élégant, en particulier car c'est plus éloigné de la description initiale de l'algorithme. C'est d'autre part légèrement plus inefficace que la version récursive, les références introduisant une indirection.