λx. x K S K @はてな

このブログ内に記載された文章およびコードの著作権は,すべて Keisuke Nakano に帰属します.

(続) 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じゃなくてもいいような….