氏名: 中村 敏広 (089631358)

論文題目: TRSコンパイラに基づく関数型言語の処理系


論文概要

関数型言語には、実用的プログラミングにも用いられているMLのほか、Haskell、 Goferなどの言語がある。しかしながら、解が存在するにも関わらず、無限ループ に陥ってしまい解に到達できない場合がある。Goferではこの問題を解決するために 遅延評価の機構を導入しているが、完全な解決にはなっていない。 一方、項書換え系(TRS)では正規化戦略、すなわち解が存在するならばその解に到達 するように書き換えを行う手法の研究が進んでいる。TRSコンパイラであるCdimple には、正規化戦略が実現されている。 本研究では、関数型プログラムを項書換え系に変換し実行することによって問題の解 決を図る。 具体的には関数型言語としてGoferを、TRSコンパイラとしてCdimpleを用いる。 変換においては、両言語に(1)基本関数、(2)where構文、(3)ガード構文、(4)高階関 数の有無、(5)モジュール機能、 (6)エラーの扱い、(7)入出力、などの違いを埋める必要がある。本研究ではこれらの うち(1),(2),(3)について 変換法を考えた。(1)については、Goferには数値演算、リスト演算などの基本関数が 利用可能であるが、 、Cdimpleではユーザが用意する必要がある。そこで、整数演算については、加算 SUM\_INTや減算DIFF\_INTなどの 関数に書換え、リスト演算については、nilInt,consIntとそれらを扱う関数を定義す る書換え規則を新たに用意し、 これに対処した。(2)のwhere構文は関数定義中で機能のまとまった部分や何度も用い られる計算結果を一時的な変数 に入れてから使うための構文である。これについては、 where以下で定義される一時変数の各々について、新たな関数を用意し与えられた定 義から書換え規則に変換した。 この際に、環境中の変数を暗黙に使っている場合には、これらを新たに定義した関数 の引数とするように工夫した。 (3)のガード構文は条件により複数の場合に分けて処理を行うための構文である。こ れについてはIF文を 入れ子状に用いることによって解決した。実際に、この考え方に基づいてGoferプロ グラム をCdimpleの入力フォーマットに変換する変換プログラムを言語Cで実装した。さら に、いくつかのGoferプログラムを 本システムで変換し、得られたTRSをCdimpleにより実行した。その際に 変換の速度、変換によって得られたTRSの実行速度を評価した。また本システムを実 用的なものとするために必要な機能について検討した。


目次に戻る


asakura@nuie.nagoya-u.ac.jp