(続) Haskell Bowling
前にも書いた通り,Haskell Bowlingは間違っている上に分かりにくいわけですが, kinaba氏が別の定義を紹介しています.この方がスマートだし,なにより正しいプログラムです. たとえば,
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
X _ | X _ | X _ | X _ | X _ | X _ | X _ | X _ | X _ | 3 3 _ |
30 | 60 | 90 | 120 | 150 | 180 | 210 | 233 | 249 | 255 |
score [10,10,10,10,10,10,10,10,10,3,3] --> 249となってしまいますが,こちらの方法では,
score [10,10,10,10,10,10,10,10,10,3,3] --> 255と正しい答えを返します.元のプログラムを正しくするにはフレームを数えないといけないのでやっぱりダメダメですね. 確かに,kinaba氏の言うように,
frames の再帰を止める気が全然ないのは気持ち悪いかもしれませんが, 元のプログラムが,Haskellを使うくせに
遅延評価を使う気が全然ないというのも気持ち悪いです.パターンマッチだけを使いたいならHaskellじゃなくてもいいような….