計算アプリケーションを作る(概要)

January 25, 2026 · View on GitHub

ここから先は、次のような仕様のコマンドラインアプリケーションを作ることをゴールとします。

  • 以下のような内容の、1行ごとにタブ区切りで「分類(タブ文字や改行を含まない文字列)」と「金額(0以上の整数)」が書かれたファイルの名前を(0個以上)引数として受け取る(<tab>はタブ文字、<newline>は改行文字を表す)。
    分類<tab>1234<newline>
    ほかの分類<tab>9876<newline>
    さらにほかの分類<tab>3141592<newline>
    
  • ファイルを読み、「分類」ごとの「金額」の合計を計算し、出力する。
    • 同じ「分類」の行が、受け取ったファイル群の中に複数存在していることがあるので、「分類」ごとの「金額」の合計を知りたい。
  • 各行の形式が上記の形式に沿わない場合、例えば各行をタブで分割した結果のリストの要素数が2でない場合や、2つめの要素が10進数になっていない場合は、例外によって強制終了する。

そのために以下の課題を解いて、Haskellの初歩を身につけましょう。以下の課題で得た知識全てが上記のアプリケーションを作るのに必要というわけではありませんが、いずれも簡単なHaskell製プログラムを書く上で役に立つので、なるべく全て解いてみてください。

  • 複数の命令を並べる - (課題3)
  • 入力の取得 - (課題4など)
  • 型注釈をつける・入力を数値に変換する - (課題5)
  • 自分で型を定義する・文字列を結合する - (課題hoge(6?))
  • 型クラスで自分が作った型を拡張する - (課題hoge(7?))
  • タプルを扱う - (課題hoge(8?))
  • 入力した値の内容に応じて処理を分ける
    • if式 - (課題hoge(5.5?))
    • case式 - (課題hoge(9?))
  • 関数を定義してリファクタリングする - (課題hoge(10?))
  • 処理を繰り返し実行する (1) - 再帰関数を使う - (課題hoge(11?))
  • 例外をスローする・再帰呼び出し(復習) - (課題hoge(12?))
  • モジュールをimportする - (課題hoge(13?))
  • 標準ではインストールされていないパッケージを利用する - (課題hoge(14?))
  • 処理を繰り返し実行する (2) - 標準で使える高階関数を使う - (課題hoge(15?))
  • 連想配列を扱う - (課題hoge(16?))