型推論 - let文
let 式 (値への変数の束縛) の場合は、次のような構造を取る
E1
の型の評価が行われ、その結果を v の型として型環境に追加する。E2
の評価では
v の型が記載された型環境が用いられる
let v = E1
in E2
v : a Γ ⊢ let I = E1
in E2
: T2
Γ ⊢ E1
: T1
Γ, x:T1
⊢ E2
: T2
8
9.
型推論 - letrec 文
let rec 文では E1
中に I の出現がある可能性がある
先に I を型 α としてみなす型環境を追加する。E1
の型の評価では、I:α の型環境で
評価が行われ、その結果を α と同一化 (unify) する。E2
の評価では、型が記載された
型環境が用いられる
let rec I = E1
in E2
I : α
9
中間コード生成
実際に CPU が実行できるように近づけるコード変換を中間コード生成とよぶ
letrec fib n =
if n <= 2 then 1
else fib (n - 1) +
fib (n - 2)
let rec fib n =
let x = n <= 2 in
if x then
1
else
let a = n - 1 in
let b = fib a in
let c = n - 2 in
let d = fib c in
let e = b + d in
e
Function fib(n) {
x = n <= 2;
Jump to E1 if !x;
Return 1;
E1:
a = n - 1;
b = Call fib(a);
c = n - 2;
d = Call fib(c);
e = b + d;
Return e;
}
変換のイメージ:
13