2006-06-19
■[Haskell]有理数の計算 
前回の記事へ、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
コメントを書く
トラックバック - http://d.hatena.ne.jp/haskon/20060619