ユークリッドの互除法で最大公約数

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~ p.51より。再帰的に定義する。

 # let rec euclid m n =
     if m = n then m
     else if m > n then euclid n m
     else euclid (n - m) m
   ;;
 val euclid : int -> int -> int = <fun>
 # euclid 12 60;;
 - : int = 12
 # euclid 12 6;;
 - : int = 6

基本的には m≦n のつもりで書いているけど,n - m と m の大小関係は決定できないので3行目を入れた。これで m と n の大小関係も気にしなくて済んでいる。