「關於編譯器的一些想法」修訂間的差異

無編輯摘要
 
(未顯示同一使用者於中間所作的 6 次修訂)
行 1: 行 1:
{{Nav|程式語言、邏輯學}}
{{Nav|程式語言、邏輯學}}
==coding:style==
<pre>
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;
}
};
</pre>
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


==迴圈==
==迴圈==
行 72: 行 97:
==對字串的思考==
==對字串的思考==


字串是什麼? →其實可以表示為很大的數字。
字串是什麼? →其實可以表示為很大的數字。
   
   
所以,要用鏈表表示也是可行的。
所以,要用鏈表表示也是可行的。
   
   
==閉包==
   
   
===閉包===
<pre>
```
  (x)=>{foo(x, free_vars)}
  (x)=>{foo(x, free_vars)}
```
</pre>
   
   
轉換
轉換
```
   
   
<pre>
  ThunkAnony8964 thunkanony8964(TypeOfX x ,TypeFreeVars  env){
  ThunkAnony8964 thunkanony8964(TypeOfX x ,TypeFreeVars  env){
foo(x, env[free_vars]);
foo(x, env[free_vars]);
行 102: 行 125:
  anony8964.thunk = *thunkanony8964;
  anony8964.thunk = *thunkanony8964;
   
   
```
</pre>
   
   
調用
執行函數


```
<pre>
  lambda(x){body}(n);
  lambda(x){body}(n);
```
</pre>
 
改為
改為
```
 
<pre>
  anony9864.thunk(n, anony8964.env);
  anony9864.thunk(n, anony8964.env);
```
</pre>


== 如何代碼刪除不須存在的變數或函數? ==
== 如何代碼刪除不須存在的變數或函數? ==


* '''1. 通常情況且 2.不可變 及 3. 不為外部引用者''',只要變(函)數不出現在作用域的任何獨立表達式(須化簡)和定義式的右手邊(須化簡),則可以刪掉。
* 通常來說,下列兩個條件均滿足下,只要變(函)數不出現在作用域的任何獨立表達式(須化簡)和定義式的右手邊(須化簡),則可以刪掉:
*# 不可變
*# 不為外部引用


[[category:資訊]]
[[category:資訊]]