OCamlの勉強を始めました。
まず最初に基本のFizzBuzzを書こうと思います。

FizzBuzzとは

FizzBuzzとは、

  • 3の倍数の時は、Fizz
  • 5の倍数の時は、Buzz
  • 3の倍数かつ5の倍数の時は、Fizz Buzz
  • それ以外は数字を出力

するプログラムです。

基本的な分岐やループがわかっていることが確かめられます。

関数

関数の書き方は、

let f a b =
    a + b ;;

と書けます。

# f 1 2;;
- : int = 3

関数呼び出しは上記の様になります。引数にはかっこはつきません。

分岐

分岐はif文が使えます。

# let max a b =
    if a > b then a
    else b;;

と書けば良いです。
if (条件) then (実行する文) となります。

再帰

再帰には関数に rec とつける必要があります。
下記に階乗のプログラムを載せておきます。

# let rec fact a b =
  if b == 1 then a
  else fact (a * (b - 1)) (b - 1);;
val fact : int -> int -> int = <fun>
# let f a =
    fact a a;;
val f : int -> int = <fun>
# f 6;;
- : int = 720

関数名の前に rec をつけると再帰呼び出しが可能になります。

FizzBuzz実装

ちなみにOCamlで剰余算は mod です。

fizzbuzz.ml
let rec fizzbuzz n max =
  if n mod 15 == 0 then Printf.printf "fizz buzz\n"
  else if n mod 3 == 0 then Printf.printf "fizz\n"
  else if n mod 5 == 0 then Printf.printf "buzz\n"
  else Printf.printf "%d\n" n;
  if n < max then fizzbuzz (n + 1) max

let () =
  fizzbuzz 1 30

最大値はハードコードしてしまいました。
以下に結果を出します。

$ ocaml fizzbuzz.ml
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizz buzz
16
17
fizz
19
buzz
fizz
22
23
fizz
buzz
26
fizz
28
29
fizz buzz
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.