ネストしたletの簡約(assoc.ml)

 

次に、式の形を見やすくするために、let x = (let y = e1 in e2) in e3のようにネストしたletを、let y = e1 in let x = e2 in e3のように平たくします。これはMinCamlでコンパイルされたプログラムの性能に(直接は)影響しませんが、コンパイラのデバッグや実験のときに、人間にとってわかりやすくするためです。

 

この簡約はAssoc.fで実装されています。let x = e1 in e2という形の式があったら、まず再帰によりe1e1'に、e2e2'に簡約します。そして、e1'let ... in eのようになっていたら、最後のinの直後にlet x = e in e2'を挿入して、let ... in let x = e in e2'という式を返します。ちょっとトリッキーですが、できてしまえば非常に簡単です(assoc.mlはわずか21行です)。

 

次へ進む