迴圈
for 到 while
可以轉換成
迴圈如何變成尾遞迴
其中 $bodyExp_n$ 可以為下列之一:
![{\displaystyle oldVar_{j}:=f(calledVar_{1},[calledVar_{2},...])}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b2862996a4b5d9ce6f4e40a94d8563fde8be5e44)
![{\displaystyle newVar_{j}=f(calledVar_{1},[calledVar_{2},...])}](https://wikimedia.org/api/rest_v1/media/math/render/svg/bb02a565084e22438e91d8a1dd405e00de8f54a0)
當然還有部分調用、全部調用
![{\displaystyle isolatedVar}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3d584dacf5566cee100ba18b701d2551a32a8c78)
![{\displaystyle consonant}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2b796c0c5004a20ea0c029dafc33cdf6ead76ab8)
可以分析
有哪些?
有哪些?
設
,
則
while 迴圈就可以變成新的遞迴函數
,如下:
解析失敗 (不明函數 "\begin{align}"): {\displaystyle \begin{align} & recFunc(all~x~from~iteratedVarSet)\{\\ & if(condFunction)\{\\}
& newBodyExp_i\\
& return~~recFunc(...)\\
& \}
& \}
\end{align}
</math>
對字串的思考
字串是什麼? →其實可以表示為很大的數字。
所以,要用鏈表表示也是可行的。
閉包
```
(x)=>{foo(x, free_vars)}
```
轉換
```
ThunkAnnoy8964 thunkannoy8964(TypeOfX x ,TypeFreeVars env){
foo(x, env[free_vars]);
}
struct ClosureTypei1r1 {
TypeFreeVars env, # 可以用鏈表
*ThunkAnnoy8964 thunk,
};
ClosureTypei1r1 annoy8964;
TypeFreeVars env = free_vars;
annoy8964.env = env;
annoy8964.thunk = *thunkannoy8964;
```
調用
```
lambda(x){body}(n);
```
改為
```
annoy9864.thunk(n, annoy8964.env);
```