Type Felix struct{
Str name,
Int age};
Int a = 2 + 2;
(Int Int -> Int) add = lmd(x, y) {
if (x == 0){
return y;
}else{
return x + y;
}
};
bool a = (20 == (lmd(int x, int y){return x * y;}(12, 6)) + 2);
Felix (Str name, Int age)
Int a = 2 + 2;
add = l int x ,int y
for 到 while
可以轉換成
迴圈如何變成尾遞迴
其中 $bodyExp_n$ 可以為下列之一:
-
-
- 當然還有部分調用、全部調用
-
-
可以分析 有哪些? 有哪些?
設 , 則
while 迴圈就可以變成新的遞迴函數 ,如下:
(x)=>{foo(x, free_vars)}
轉換
ThunkAnony8964 thunkanony8964(TypeOfX x ,TypeFreeVars env){
foo(x, env[free_vars]);
}
struct ClosureTypei1r1 {
TypeFreeVars env, # 可以用鏈表
*ThunkAnony8964 thunk,
};
ClosureTypei1r1 anony8964;
TypeFreeVars env = free_vars;
anony8964.env = env;
anony8964.thunk = *thunkanony8964;
執行函數
lambda(x){body}(n);
改為
anony9864.thunk(n, anony8964.env);