九九掛け算表

Haskell で九九の掛け算表を作ってみた。九九の表を計算するプログラムと表示部を分離してモジュール化できるようにした。

九九の表の計算部分はもちろんのことだが、表示部も部品を関数として設計していくと自然にモジュール化されたプログラムが出来上がっていく。また、部品のテストが関数の場合全体のプログラムとは独立してできる。個々の部品をテストしながら全体を組み上げていくプラモデル感覚のプログラミングが面白い。

関数型言語でプログラムを作るときは、全てを関数で作るつもりでプログラムしたほうが良いようだ。

掛け算九九表示プログラム:
main = do putStr $ format $ kuku [2..9]

kuku xs = [map (*x) xs | x <- xs]

format xs = formatD $ map (formatC . formatB) xs

formatA x = reverse $ take 3 $ reverse ("  " ++ show x)
formatB xs = map formatA xs
formatC xs = unwords xs ++ "\n"
formatD xs = foldl (++) [] xs

実行例:
Main> formatA 1
" 1"
Main> formatB [1,2]
[" 1"," 2"]
Main> (formatC . formatB) [1,2]
"  1   2\n"
Main> main
  4   6   8  10  12  14  16  18
  6   9  12  15  18  21  24  27
  8  12  16  20  24  28  32  36
10  15  20  25  30  35  40  45
12  18  24  30  36  42  48  54
14  21  28  35  42  49  56  63
16  24  32  40  48  56  64  72
18  27  36  45  54  63  72  81

Main> putStr $ format $ kuku [2..5]
  4   6   8  10
  6   9  12  15
  8  12  16  20
10  15  20  25
[PR]
by tnomura9 | 2009-09-05 12:50 | Haskell | Comments(0)
<< 日付の取得 差分をプログラムする >>