九九を表示するプログラム
リスト内包表記を使って九九のリストを求めて、それを表示するようにしてみました。
module Main (main) where import Text.Printf (printf) kuku :: [(Int, Int, Int)] kuku = [(i, j, i * j) | i <- [1 .. 9], j <- [1 .. 9]] main :: IO () main = do header mapM_ f kuku where header = do putStr " |" mapM_ (printf " %2d") ([1 .. 9] :: [Int]) putStrLn "" putStrLn "--+----------------------------" f (i, 1, n) = printf "%2d| %2d" i n f (_, 9, n) = printf " %2d\n" n f (_, _, n) = printf " %2d" n
実行例:
$ ./kuku | 1 2 3 4 5 6 7 8 9 --+---------------------------- 1| 1 2 3 4 5 6 7 8 9 2| 2 4 6 8 10 12 14 16 18 3| 3 6 9 12 15 18 21 24 27 4| 4 8 12 16 20 24 28 32 36 5| 5 10 15 20 25 30 35 40 45 6| 6 12 18 24 30 36 42 48 54 7| 7 14 21 28 35 42 49 56 63 8| 8 16 24 32 40 48 56 64 72 9| 9 18 27 36 45 54 63 72 81
くくといっても"<<"ではありません(Ruby関西向け)。