Haskellのライブラリリファレンスを見ていたらprintfを発見。早速試してみる。
import Text.Printf putProd :: PrintfType r => Integer -> Integer -> r putProd m n = printf "%d * %d = %d" m n (m*n)
使い方はいたって簡単なのだけれど、最後の型がよくわかっていません。どういう仕組みで不定長引数を使えるんだろ?加えて日本語を使った時点でアウト。わたしが今使っているghc-6.4.1では日本語を使えない模様。
printfは完成されているので発明されてから今までずっと使われている、という記述をどっかで読んだ覚えがあります。が、型チェックがなかったりと、わたしはあまり好いていません。今のわたしなら、こっちの方が好みかも。
putProd m n = putStr $ (show m) ++ " * " ++ (show n) ++ " = " ++ (show (m*n))
なんか、CとC++の違いみたい。
// Cだと… printf("%d * %d = %d", m, n, m*n); // C++だと… std::cout << m << " * " << n << " = " << (m*n);