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);;