檢視 關於編譯器的一些想法 的原始碼
←
關於編譯器的一些想法
跳至導覽
跳至搜尋
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
{{Nav|程式語言、邏輯學}} ==迴圈== ===for 到 while=== <math> \begin{align} & for(idVar = initValue;~~cond(idVar); ~~idVar:=updateIdVar(i))\{ \\ & body... \\ \} \end{align}</math> 可以轉換成 <math> \begin{align} & idVar = initValue \\ & while(cond(i))\{\ \\ & body... \\ & idVar:=updateIdVar(i) \\ & \}\end{align} </math> ===迴圈如何變成尾遞迴=== <math> \begin{align} & while(condFunction(x~[,y,...]))\{\\ & bodyExp_1[, bodyExp_2,...]\\ & \}\\ \end{align} </math> 其中 $bodyExp_n$ 可以為下列之一: * <math>oldVar_j := f(calledVar_1, [calledVar_2,...])</math> * <math>newVar_j = f(calledVar_1, [calledVar_2,...])</math> * <math>f(expression_i)</math> 當然還有部分調用、全部調用 * <math>isolatedVar</math> * <math>consonant</math> 可以分析 <math>oldVar_j</math> 有哪些?<math>newVar_j</math>有哪些? 設<math>oldVarSet = \{oldVar_i|i = 1,2,...,n\}</math>,<math>calledVarSet = \{calledVar_i|i = 1,2,...,n\}</math> 則 <math>iteratedVarSet = oldVarSet\cap calledVarSet</math> while 迴圈就可以變成新的遞迴函數 <math>recFunc</math>,如下: <math> \begin{align} & recFunc(all~x~from~iteratedVarSet)\{ \\ & if(condFunction)\{ \\ & newBodyExp_i \\ & return~~recFunc(...) \\ & \} \\ & \} \end{align} </math> ==對字串的思考== 字串是什麼? →其實可以表示為很大的數字。 所以,要用鏈表表示也是可行的。 ==閉包== <pre> (x)=>{foo(x, free_vars)} </pre> 轉換 <pre> 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; </pre> 執行函數 <pre> lambda(x){body}(n); </pre> 改為 <pre> anony9864.thunk(n, anony8964.env); </pre> == 如何代碼刪除不須存在的變數或函數? == * 通常來說,下列兩個條件均滿足下,只要變(函)數不出現在作用域的任何獨立表達式(須化簡)和定義式的右手邊(須化簡),則可以刪掉: *# 不可變 *# 不為外部引用 [[category:資訊]]
此頁面使用了以下模板:
模板:Nav
(
檢視原始碼
)
返回到「
關於編譯器的一些想法
」。
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
視圖
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
首頁
愛爾蘭語辭典
近期變更
隨機頁面
有關 MediaWiki 的說明
相關網站
總首頁
Blog
舊 blog
現用 blog 備份
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊