let rec fizz = ""::""::"fizz"::fizz;;
let rec buzz = ""::""::""::""::"buzz"::buzz;;

let rec take l n = match l with
  [] -> []
  | hd::tl -> if n > 0
    then hd::take tl (pred n)
    else []

let fizzbuzz = List.map2 (fun n -> function "" -> string_of_int n | a -> a) (List.map succ (Array.to_list (Array.init 100 (fun x -> x)))) (List.map2 (^) (take fizz 100) (take buzz 100));;

List.iter print_endline fizzbuzz;;