読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

FizzBuzzをOCamlで書いた

OCaml

Google Alertで"OCaml"をRSS購読してるんですが、タイトルだけ見て「そういえばやってなかったな」と思ったんで書いてみました。

適当コードでもちゃんと動いた。とりあえずこれくらいはすぐに書けてよかった。

let rec fizzbuzz ret n = function
  | x when x > n
      -> List.rev ret
  | x when (x mod 3 = 0) && (x mod 5 = 0)
      -> fizzbuzz ("FizzBuzz"::ret) n (x+1)
  | x when (x mod 3 = 0)
      -> fizzbuzz ("Fizz"::ret) n (x+1)
  | x when (x mod 5 = 0)
      -> fizzbuzz ("Buzz"::ret) n (x+1)
  | x
      -> fizzbuzz (string_of_int x::ret) n (x+1)
;;

let rec print_list = function
  | [] -> ()
  | x::xs -> 
      begin
        Printf.printf "%s " x;
        print_list xs
      end
;;

print_list (fizzbuzz [] 100 1);;

さらにもう一つ。

let rec fizzbuzz ret = function
  | x when x = 0
      -> ret
  | x when (x mod 3 = 0) && (x mod 5 = 0)
      -> fizzbuzz ("FizzBuzz"::ret) (x-1)
  | x when (x mod 3 = 0)
      -> fizzbuzz ("Fizz"::ret) (x-1)
  | x when (x mod 5 = 0)
      -> fizzbuzz ("Buzz"::ret) (x-1)
  | x
      -> fizzbuzz (string_of_int x::ret) (x-1)
;;

let rec print_list = function
  | [] -> ()
  | x::xs -> 
      begin
        Printf.printf "%s " x;
        print_list xs
      end
;;

print_list (fizzbuzz [] 100);;