エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Fizz Buzz by Haskell part2

もう一段階簡単にする方法をコメントで教えて頂きました。ありがとうございました。

fizz     = cycle [ "", "", "Fizz" ]
buzz     = cycle [ "", "", "", "", "Buzz" ]
fizzbuzz = zipWith max (map show [1..]) $ zipWith (++) fizz buzz


大小を比較できる要素からなるリストも大小を比較できる。ので、(大小を比較できる)CharのリストであるStringも大小を比較できる。大小を比較できればmaxを適用できる…。気がつきませんでした。なるほどー。


一行に押し込めることを考えなければ、もちっとすっきり書けることにも気がつきましたが。

f n [] [] = show n
f n x  y  = x ++ y

fizz     = cycle [ "", "", "Fizz" ]
buzz     = cycle [ "", "", "", "", "Buzz" ]
fizzbuzz = zipWith3 f [1..] fizz buzz