学位論文要旨



No 113120
著者(漢字) 石井,裕一郎
著者(英字)
著者(カナ) イシイ,ユウイチロウ
標題(和) 擬データを用いた対話的関数プログラミングに関する研究
標題(洋)
報告番号 113120
報告番号 甲13120
学位授与日 1998.03.16
学位種別 課程博士
学位種類 博士(工学)
学位記番号 博工第4027号
研究科 工学系研究科
専攻 情報工学専攻
論文審査委員 主査: 東京大学 教授 武市,正人
 東京大学 教授 田中,英彦
 東京大学 教授 井上,博允
 東京大学 教授 近山,隆
 東京大学 助教授 田中,哲朗
 東京大学 講師 胡,振江
内容要旨

 本稿では、対話的プログラムを擬データ関数プログラミングによって記述する手法を提案する。

 ここで、対話的プログラムとは、プログラム以外のものと対話を行うプログラムをいう。ここでプログラム以外のものには、人間や、マウスやキーボードやディスプレーなどの装置や、ファイルなどの抽象的な装置や、ほかのコンピュータやネットワークなど、さまざまなものが含まれる。したがって、対話には、例えばコンソール入出力、ファイル入出力、ネットワーク通信、さまざまなシステムコール呼び出しなどが含まれる。これらは対話的プログラムの外側にあるため、これら及びこれらと対話を行う対話的プログラムからなる系は、その動作が予め決定できない非決定性を有する。

 このような対話を実現する手法として従来提案されてきた手法を整理すると、以下の3種に分類できる。

 1.getchar型。プログラムの外部でイベントが発生するまで待つようにプログラムを構成する手法。

 2.Dialogue型/XNextEvent型。各種発生するイベントを併合して一列に並べ、これを順にプログラムが処理するようにプログラムを構成する手法。

 3.イベントハンドラ型。イベントが発生したときのプログラムの動作を、それぞれのイベントに対して独立して与える方法。

 しかし、これらには、機能の区分けが不十分、構成的なプログラム作成が難しい、様々な制御の表現が難しい、プログラムの生産性が低い、動作の証明や解析が困難、などの問題点がある。

 本稿では、関数プログラミングに擬データという新しいデータ構造を導入してこれらの問題を解決する手法について提案する。

 さて、関数プログラミングには「同じ文脈の同じ式は同じ値を意味する」という優れた性質がある。一方、上記の通り、対話的処理は入出力などの処理を伴うため実際に動作させてみるまで得られる値がわからない「非決定性」という特徴を有する。関数プログラミングの優れた性質を維持しつつ非決定性を扱う手法として、Burtonらによって「擬データ」が提案されているが、この「擬データ」はいわば場当たり的な解決手法であり、一般性に欠ける。

 そこで、我々は、従来の「擬データ」を一般化して整理した上で、対話的関数プログラミングのための手法である擬データ関数プログラミングを提案した。擬データ関数プログラミングでは、さまざまな入出力処理、非決定的選択、割り込み処理、イベント駆動プログラミングなどを従来よりも一般的に表現することができる。

 擬データでは、単一代入に類似した機能が実現される。この「単一代入」はパターン照合によって行われ、特殊なパターンによって「単一代入」が行われる部分が明示される。したがって、従来の関数プログラミングと擬データ処理との区別が明確にできる。また、擬データの値を取得する計算は、「単一代入」が発生するまでサスペンドする。これはgetchar型の関数の振舞いに類似する。

 遅延評価及び並行処理と、擬データとを組み合わせて対話的関数プログラムを構成すると、上記の3種のプログラミングスタイルを見通し良く整理することができる。

 対話的関数プログラミングの従来技法と比較して、本稿で述べる擬データ関数プログラミングは、表現力が豊かな点、機能の分離が従来よりも詳細にできる点、動作の数学的な説明ができる点などで優れている。

 以下、本稿の構成について述べる。

 第1章「はじめに」では、本稿の目的とその概要を説明する。

 第2章「関数プログラミング」では、関数プログラミングの概要について説明し、入出力や非決定的処理などを扱う従来の手法について述べ、特に、これら従来の手法を用いた対話的関数プログラミングの問題点に言及する。

 第3章「擬データの導入」では、我々が対話的関数プログラミングの一手法として提案した擬データ関数プログラミングの概要について述べる。

 第4章「擬データと並行計算」では、擬データ関数プログラミングと並行処理や非決定的選択の関係について述べる。また、対話的処理が並行して行われる場合の取扱いにも触れる。

 第5章「擬データと割り込み処理」では、擬データ関数プログラミングとイベント処理などの割り込み処理の関係について述べ、本手法によれば、入出力も割り込み処理も同様の取扱いができることについて説明する。特に、対話的処理を擬データ関数プログラミングによって自然に整理された形で記述できる点について言及する。

 第6章「擬データにおけるプログラミング技法」では、ユーザが容易に対話的関数を作成するためのさまざまな技法について整理して紹介する。特に、高階関数を用いて、擬データの引数を「隠す」手法について説明する。

 第7章「擬データの応用例」では、擬データ関数プログラミングによる対話的関数アプリケーションの例について紹介する。特に、ファイルの遅延入出力の実現、アプレットの実現、ミニOSに実現についてに言及する。

 第8章「擬データの簡約規則」では、擬データを用いた関数プログラムの簡約規則について説明する。これは、LaunchburryのNatural Semanticsを拡張したものであり、この簡約過程によって、遅延入出力の動作などを伴う2つのプログラムの同等性が説明できる。これにより、対話的関数の性質を調べることができる。

 第9章「擬データの実装」では、対話的処理を実際に実験するための擬データを用いた関数プログラムの処理系gof javaについて説明する。gof javaは擬データ関数プログラムをJAVAへ翻訳するコンパイラ系であり、JAVAで利用できるライブラリと関数プログラムとのインターフェースを、擬データとすればよいことを示す。

 第10章「検討」では、対話的処理を記述するための従来の手法を挙げ、我々が提案する擬データを用いた関数プログラミングと、他のプログラミング手法について比較し、検討を加える。

 第11章「今後の展望」では、擬データを用いた関数プログラミングに関する今後の課題と展望について述べる。特に、他言語との連携の記法についての提案を行う。

 第12章「おわりに」では、本研究について総括する。

 第13章「感想」では、本研究を進めた上での感想などを述べる。

 第14章「謝辞」は、お世話になった方々への謝辞である。

審査要旨

 本論文は「擬データを用いた対話的関数プログラミングに関する研究」と題し、12章からなる。本論文で対象とする対話的プログラムとは、プログラム以外のものと対話を行うプログラムのことであり、マウス・キーボード・ディスプレーなどの装置、ファイルなどの装置のほか、ほかのコンピュータやネットワークなどさまざまなものが含まれる。これらは対話的プログラムの外部にあるため、これらと対話を行うプログラムからなるシステムは、その動作が予め決定することのできない非決定性を有するという特徴がある。このような対話を実現する手法として従来提案されてきた手法では機能の区分けが不十分であり、構成的なプログラム作成が難しく、さまざまな制御の表現が難しいとされ、プログラムの生産性や動作の証明・解析の点で問題があった。本論文では、この問題に対して、関数プログラミングにデータ構造として擬データを導入して、解決する手法を提案している。

 本論文で導入する擬データでは、単一代入に類似した機能が実現される。これと遅延評価・並行処理と擬データとを組み合わせて対話的関数プログラムを構成することにより、対話的プログラムを統一的に捉えることができることを主張している。すなわち、従来の対話的関数プログラミングと比較して、本論文で扱う擬データ関数プログラミングは、表現力が豊かな点、詳細な機能分離が可能な点、動作の数学的な説明ができる点などで優れていることを実証している。

 第1章「はじめに」では、本論文の目的とその概要を説明している。

 第2章「関数プログラミング」では、関数プログラミングの概要を述べるとともに、入出力や非決定的処理などを扱う従来の手法について述べ、とくに、これらの手法を用いた対話的関数プログラミングの問題点に言及している。

 第3章「擬データの導入」では、本論文で提案している対話的関数プログラミングの一手法としての擬データ関数プログラミングの概要について述べている。

 第4章「擬データと並行計算」では、擬データ関数プログラミングと並行処理や非決定的選択の関係について述べ、対話的処理が並行して行われる場合の取扱いにも触れている。

 第5章「擬データと割り込み処理」では、擬データ関数プログラミングとイベント処理などの割り込み処理の関係について述べ、本手法によれば、入出力も割り込み処理も同様の取扱いができることに言及している。とくに、対話的処理が擬データ関数プログラミングによって自然に整理された形で記述できる点を主張している。

 第6章「擬データにおけるプログラミング技法」では、ユーザが容易に対話的関数を作成するためのさまざまな技法について例示している。とくに、関数プログラミングに特徴的な高階関数を用いて、擬データの引数を「隠す」手法について説明している。

 第7章「擬データの応用例」では、擬データ関数プログラミングによる対話的関数アプリケーションの例を取り扱っている。ここでは、ファイルの遅延入出力の実現、アプレットの実現、ミニOSの実現法などを具体例として取り上げている。

 第8章「擬データの簡約規則」では、擬データを用いた関数プログラムの簡約規則を定めている。これは、Natural Semanticsを拡張したもので、この簡約過程によって、遅延入出力の動作や、副作用を伴う2つのプログラムの同等性が説明できる。簡約規則は対話的関数の性質を調べるための基礎を与えるものであるといえる。

 第9章「擬データの実装」では、対話的処理を実現するための擬データを用いた関数プログラムの処理系gof javaについて説明している。gof javaは擬データ関数プログラムをJAVAへ翻訳するコンパイラであり、JAVAで利用できる副作用を伴うライブラリと関数プログラムとのインタフェースを擬データとすればよいことを示している。

 第10章「検討」では、対話的処理を記述するための従来の手法を取り上げ、本論文で提案する擬データを用いた関数プログラミングと比較し、検討を加えている。

 第11章「今後の展望」では、擬データを用いた関数プログラミングに関する今後の課題と展望について述べている。とくに、他言語との連携の記法についても提案を行っている。

 第12章「おわりに」では、本研究について総括している。

 以上を要するに、本論文は従来、十分には検討されていなかった対話的プログラミングの非決定性をあらたなデータ構造を導入した関数プログラミングの視点から扱い、関数プログラミングの特徴を活かした方法論を提示しており、この成果は情報工学上貢献するところが少なくない。よって本論文は博士(工学)の論文として合格と認められる。

UTokyo Repositoryリンク