有理数の計算
前回の記事へ、id:nobusunさんからツッコミをいただいて、原因判明。Haskellの変数名は、小文字英数から始めないといけなかったんですね。で、id:nobusunさんが示していただいた、ソースに変更。
$ cat yuuri.hs data Yuuri = Yu Integer Integer yAdd::Yuuri -> Yuuri -> Yuuri yAdd (Yu s b ) (Yu s' b') = Yu (s*b'+s'*b) (b*b')
変数が短く、シングルクォートも使っているところが、いかにもHaskellっぽいです。で、実行してみます。
$ ghci yuuri.hs Loading package base-1.0 ... linking ... done. Compiling Main ( yuuri.hs, interpreted ) Ok, modules loaded: Main. *Main> yAdd (Yu 2 3) (Yu 3 2) Top level: No instance for (Show Yuuri) arising from use of `print' at Top level Probable fix: add an instance declaration for (Show Yuuri) In a 'do' expression: print it
ロードは、成功したけど、新たに問題が。エラーメッセージをみるとYuuriはShowのインスタンスでないから、表示させてあげないってことみたい。ということで、
$ cat yuuri.hs data Yuuri = Yu Integer Integer deriving Show yAdd::Yuuri -> Yuuri -> Yuuri yAdd (Yu s b ) (Yu s' b') = Yu (s*b'+s'*b) (b*b') $ ghci yuuri.hs Loading package base-1.0 ... linking ... done. Compiling Main ( yuuri.hs, interpreted ) Ok, modules loaded: Main. *Main> yAdd (Yu 2 3 ) (Yu 3 2) Yu 13 6