Haskellでニム和、ニム積の実装
ニムとは
http://en.wikipedia.org/wiki/Nimber
ニム和、ニム積の実装をHaskellで書いてみました。
100%そのままではないにしろ、数式をそのままコードに置き換えることができたのではないでしょうか。 無限リストや内包表記の使い方の学習にもなりました。
おもったこと
- コンパイラはパターンターンマッチの重複まで調べてくれるのですね。実際このワーニングが出ていたのでバグに気づけました。
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
- Nim Multiplication Calculator