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