関数プログラミングのアプローチ (9)

行番号を付加する命令的プログラム

前回までは、乱数を使ったモンテカルロ法のプログラムを題材に、関数プログラミングについて検討しました。今回からは新しい題材を使ってさらに検討を深めていきたいと思います。
新しい題材は、行番号を付加するプログラムです。入力ファイルからファイルの中身を1行ずつ読み取って、行の先頭に行番号を付加して、出力ファイルに1行ずつ書き出すというプログラムです。例えば入力ファイルが次のような内容だとします。

この
ファイルは
入力
ファイルです

出力ファイルは次のようになります。

1 この
2 ファイルは
3 入力
4 ファイルです

この処理を行う命令的なプログラムの全文を以下に掲載します。このあとの課題は、このプログラムのどの部分が関数的ではなく、それをどのように修正すればよいかを検討することです。

# -*- coding: utf-8 -*-
import sys

def main ():
    ifname = sys.argv[1]
    ofname = sys.argv[2]

    ifile = open(ifname, 'r')
    ofile = open(ofname, 'w')

    cnt = 0
    for line in ifile:
        cnt = cnt + 1
        ofile.write(str(cnt) + ' ' + line)

    ofile.close()
    ifile.close()

if __name__ == "__main__":
    main()