中国では,「魚和熊掌不可同時兼得」という諺がよく知られている.これは二つの貴重品を同時に手に入れることはできないという意味である.関数プログラミングにも同じことが言える.関数プログラムの開発においては,機能は小さい多数の関数を部品として組み合わせて,全体として大きなプログラムに組み上げていくというプログラミングが行なわれる.ひとつひとつの小さい関数は極めて汎用性に富む有用な部品で,これらを組み合わせた全体はモジュラー性をもち簡潔であるが,そのままでは必ずしも実行効率のよいプログラムになるとは言えない.その大きな原因としては, ・部品となる関数間で多数の中間データ構造が受け渡されること ・同一のデータ構造中を各部品関数が別個に廻ることがあること の二つを挙げることができる.本論文では主としてこの二つの問題に焦点を当て,処理対象とする大きなプログラムを,計算結果には現れない中間データ構造を生成することなく,同一のデータ構造を重複して廻らないプログラムに前処理によって変換し,構成的アルゴリズム論に基づいて実行効率を改善するための方法論を提案した. 本論文は構成的アルゴリズム論に基盤をおく。構成的アルゴリズム論(Constructive Algorithmics)とは、80年代後期に提案されたプログラムの計算法(calculus)であり、プログラムを変換するための規則を組織的に構築するための理論である.この手法では、プログラムをカテゴリ理論の枠組でとらえ,小数の強力な定理を用いてプログラムを構成的に変換していくことができる.ここで重要なのは,catamorphismと呼ばれる概念である.catamorphismとは,再帰的なデータ構造から別の再帰的な構造への「準同型」の形をした関数を指す.さらにcatamorphismとはカテゴリ的に「相対」の関係にあるanamorphismや,catamorphismとanamorphismとの合成によって表現されるhylomorphismが,プログラムの最適化において一番有用な部品として中心的な役割を果たすことがわかった.本論文は,まず第一に一般的な再帰定義をhylomorphismで表現するためのアルゴリズムを提案した.その結果,関数プログラムの最適化は一般的な再帰関数の代わりにhylomorphism上で議論すればよい.次に,本論文は構成的アルゴリズム論に基づいてプログラムを最適化するために ・プログラムの融合(fusion)の計算操作 ・プログラムの組(tupling)の計算操作 ・プログラムの副作用(side effect)の計算操作 ・プログラムの並列化(parallelization)の計算操作 に関して重要な定理及び変換アルゴリズムを与えた.これらの定理とアルゴリズムを系統的に適用することによって,効率のよい逐次または並列の関数プログラムを導くことができる. 本論文の進展によって、効率の良いプログラムを導出するための方法論が確立されることが期待される。これにより,通常のプログラミング言語で書かれたプログラムを,機械的な処理によって並列に実行し効率を高めることが可能になる.このことは、将来のソフトウェア開発、特にコンパイラの構築において大きな意義を持つ。 |