不要定義削除(elim.ml)

 

定数畳み込みを行うと、let x = 3 in let y = 7 in 10におけるxyのように、使われない変数定義や関数定義が出てきます。MinCamlでは、これをElim.fで取り除きます。

 

一般に、e1に副作用がなく、x e2に出現していなければ、let x = e1 in e2という式を単なるe2に変換することができます。この「副作用がない」という条件を実装したのがElim.effect、「変数が式に出現する」という条件を実装したのがKNormal.fvです。ただし、副作用が本当にあるかどうかは決定不能なので、「配列への書き込みか、関数呼び出しがあったら副作用がある」と判定しています。

 

ちなみにKNormal.fvという名前は自由変数(free variable)という用語に由来します。たとえばlet x = 3 in x + yという式には二つの変数x, yがありますが、x は式の中で整数3に定義(束縛)されているので束縛変数といわれ、yは束縛されていないので自由変数といいます。

 

次へ進む