エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

printf

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);