読者です 読者をやめる 読者になる 読者になる

IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Haskellでニム和、ニム積の実装

ニムとは

http://en.wikipedia.org/wiki/Nimber

ニム和、ニム積の実装をHaskellで書いてみました。

100%そのままではないにしろ、数式をそのままコードに置き換えることができたのではないでしょうか。 無限リストや内包表記の使い方の学習にもなりました。

Haskell Nim calculation

おもったこと

  • コンパイラはパターンターンマッチの重複まで調べてくれるのですね。実際このワーニングが出ていたのでバグに気づけました。
Prelude> :l test11.hs
[1 of 1] Compiling Main             ( test11.hs, interpreted )

test11.hs:18:1: Warning:
    Pattern match(es) are overlapped
    In an equation for `nimMul':
        nimMul x _ = ...
        nimMul x y = ...
Ok, modules loaded: Main.

課題

  • 補助関数はエクスポートしたくないのですが、それを防ぐ記述方法がまだわかっていません。
  • Bata.Bitsをインポートしていますが、依存関係をなくした方がよいと思い始めました。ニム和の方もmexを使えばできるはずなので。
  • コーディングスタイルがまだ標準的なHaskellコーディングじゃないんだろうかと思ってます。(標準的って何よって話もありますが。)
  • 演算子の記号が変な気もする。

参考URL