リストをテーブル表示する

Haskell のデータ処理はほとんどがリストの上で行われる。したがって、Haskell のリストをテーブル表示する方法が分かっていると便利だと考えた。そこで、やってみたのが次の mktbl と showtbl の二つの関数だ。

import Data.List

mktbl n xs = if xs == [] then [] else take n xs : mktbl n (drop n xs)

showtbl xs = unlines (map (concat . intersperse "\t") xs)

全部1行なのでコマンドライン上で定義しても使える。

mktbl n xs はリスト xs を n 列のカラムからなるテーブルに変換する。
Main> mktbl 3 [1..9]
[[1,2,3],[4,5,6],[7,8,9]]

showtbl はテーブルのデータをタブで区切って行ごとに改行を入れた文字列を作る。表示には putStr を併用する。
Main> putStr $ showtbl [["hello","world"],["hi","there"]]
hello world
hi    there

数値のリストは map show で文字列表示に変更してから使う。
Main> putStr $ showtbl $ mktbl 4 (map show [1..20])
1    2    3    4
5    6    7    8
9    10   11   12
13   14   15   16
17   18   19   20

リストのテーブル表示が出来れば大抵の情報処理の出力に利用出来る。

shwotbl で表示をせずに文字列を作成するだけというのが奇異な感じがするかもしれないが、Haskell の場合はぎりぎりまで純粋関数の世界でデータをこしらえて、IOモナドの出番をできるだけ少なくするのがコツのようだ。また、そのほうがモジュール化されて応用がききやすい。頭の中でも純粋関数の世界とIOモナドの世界を区別しておいたほうが良い。
[PR]
by tnomura9 | 2010-11-30 10:11 | Haskell | Comments(0)
<< 汎用入力関数 Haskell で虫食い算を解く >>