本日の課題: 以下の課題の答えを「本日中に」メイルで、 report@logic.cs.tsukuba.ac.jp あてに提出せよ。 注1. 氏名、学籍番号を「メイル本文中に」必ず明記せよ。 注2. Subjectに report という文字列を含むこと。 注3. 形式は、テキストもしくは pdf とする。(WORD は駄目) 1. MiniML には 6個の評価モードがある (0,1,2,3,4,5) これらは以下の6つであるが、どのように対応しているか推測せよ。 評価順序は3通り call by name, call by need, call by value call by name 関数の引数を評価せずに、関数に渡す call by value 関数の引数を評価してから、関数に渡す call by need call by name に似ているが、その引数が初めて 必要になった時に評価し、2回目以降は1回目の 結果を利用する(2回以上評価しない。) 変数束縛は2通り lexical (static) binding, dynamic binding これらの組み合わせが 3 * 2 = 6 通りとなる。 ex3.ml などのサンプルプログラムを使うとよい。 もし余力があれば、これら評価モードを(実行速度その他の面で) 比較検討せよ。(これが一番速い、実装が楽である、等。) 2. MiniML 処理系にも stack や heap の現在の状況を表示する機能を つけた。(具体的には、(show 1) を実行すればよい)。 ただし、関数クロージャ(計算結果としての関数)は表示できないので、 「ペア」のデータのみ表示している。 この機能を使って、ペアを使用するプログラムにおいて、 heapがどのように使われるかを考察せよ。 この問題は、5行程度の考察を述べればよい。たとえば、 ex2.ml を参考にして、自分で 1-2個のプログラムを書いて ペアを使い、heap がどうなるかを観察し、その概要を 5行程度でまとめればよい。 以上。