檢視 關於編譯器的一些想法 的原始碼
←
關於編譯器的一些想法
跳至導覽
跳至搜尋
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
==迴圈== ===for 到 while=== $for(idVar = initValue;~~cond(idVar); ~~idVar:=updateIdVar(i))\{\ \newline [[使用者:Tankianting|Tankianting]]([[使用者討論:Tankianting|討論]]) 2022年1月11日 (二) 12:47 (CST)body...\newline\}$ 可以轉換成 $idVar = initValue \newline while(cond(i))\{\ \newline [[使用者:Tankianting|Tankianting]]([[使用者討論:Tankianting|討論]]) 2022年1月11日 (二) 12:47 (CST)body...\newline[[使用者:Tankianting|Tankianting]]([[使用者討論:Tankianting|討論]]) 2022年1月11日 (二) 12:47 (CST)idVar:=updateIdVar(i)\newline\}$ ===迴圈如何變成尾遞迴=== $$while(condFunction(x~[,y,...]))\{\newline bodyExp_1[, bodyExp_2,...]\newline \} $$ 其中 $bodyExp_n$ 可以為下列之一: - $oldVar_j := f(calledVar_1, [calledVar_2,...])$ - $newVar_j = f(calledVar_1, [calledVar_2,...])$ - $f(expression_i)$ 當然還有部分調用、全部調用 - $isolatedVar$ - $consonant$ 可以分析 $oldVar_j$ 有哪些?$newVar_j$有哪些? 設$oldVarSet = \{oldVar_i|i = 1,2,...,n\}$,$calledVarSet = \{calledVar_i|i = 1,2,...,n\}$ 則 $iteratedVarSet = oldVarSet\cap calledVarSet$ while 迴圈就可以變成新的遞迴函數 $recFunc$,如下: $recFunc(all~x~from~iteratedVarSet)\{\newline if(condFunction)\{\newline newBodyExp_i\newline return~~recFunc(...)\newline \} \}$ ==對字串的思考== 字串是什麼? →其實可以表示為很大的數字。 所以,要用鏈表表示也是可行的。 ===閉包=== ``` (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); ```
此頁面使用了以下模板:
模板:Nav
(
檢視原始碼
)
返回到「
關於編譯器的一些想法
」。
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
視圖
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
首頁
愛爾蘭語辭典
近期變更
隨機頁面
有關 MediaWiki 的說明
相關網站
總首頁
Blog
舊 blog
現用 blog 備份
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊