3 2 1 評估的規則

2021-08-22 15:18:03 字數 2652 閱讀 3523

3.2.1 評估的規則

直譯器如何評估乙個組合的表示式的整體性的規範,與我們在1.1.3部分中開始介紹的內容是一致的。

為了評估表示式:

1。評估表示式的子表示式

2。應用操作符子表示式的值到運算元子表示式的值。

評估的環境模型,代替了替換模型,用來指定,應用乙個復合程式到引數的含義。

在評估的環境模型中,乙個程式總是乙個數對,包括了一些**和乙個指向環境的指標。

程式被建立僅有一種方式。即通過評估乙個lambda 表示式。這產生的程式,這個程式的**來自於lambda表示式的文字,

它的環境是lambda表示式被評估的以產生程式的環境。例如,考慮如下的程式定義。

(define (square x)

(* x x))

上述定義,被評估在全域性的環境中。程式定義的語法是僅僅是乙個隱藏的lambda表示式的語法糖。

它是如下的表示式的等價形式。

(define square

(lambda (x) (* x x )))

上述的表示式在評估(lambda (x) (* x x ))時,繫結square到全域性環境中的結果值。

圖3.2顯示出了這種define表示式的評估的結果。程式物件是乙個數對,**部分是

乙個程式,有乙個形式引數,命名為x,和乙個程式體(* x x).

這個程式的環境部分是乙個指標指到全域性環境。因為那是 lambda表示式被評估的環境。

乙個新的繫結,也就是把符號square和程式物件關聯起來,再加入到全域性的幀中。

總之,define 建立的定義通過新增繫結到幀中。

global env ----> |------------------|

| other variable   |

| squares: -       |

|---------- |------|

(define (square x)           |   ^

(* x x ))                 |   |

!   |

(*)(*)-||

!parameters : x

body: (* x x)

圖3.2 在全域性的環境中,通過評估(define (square x) (* x x))產生的環境結構

現在我們看到了程式如何建立。我們能描述程式如何被應用。環境模型指定,為了應用程式到引數,

建立乙個新的環境包括了乙個幀,這個幀把形式引數繫結到實際引數的值。這個幀的外部環境

是被程式指定的環境。現在,這個新環境,評估程式體。

為了顯示這個規則如何被遵循,圖3.3展示了環境結構是如何建立的。通過評估

表示式(square 5),在全域性環境中。square是圖3.2中程式生成的。

在乙個新的環境的建立中應用乙個程式的結果,在圖中標籤為e1,開始乙個幀x,程式的形式引數,

被繫結為5。這個幀的指標指向全域性環境。全域性環境在此終止,因為這個環境顯示了square程式的部分。

有e1,我們能評估程式的程式體,(*  x x). 因為在e1中,x的值是5,結果是(* 5 5)或者是25。

global env ----> |------------------------------|

| other variable               |

| squares: -                   |

|---------- |------------------|

(square 5)           |   ^            ^

|   |            |

!   |            |

(*)(*)-            |

|            _____|_____

|     e1---->| x:5     |

!            |_________|

parameters : x

body: (* x x)

圖3.3 在全域性環境中,評估(square 5)時建立的環境

程式的環境模型能被總結為兩條規則:

1.通過組裝乙個幀,把程式的形式引數繫結到呼叫的實際引數上,乙個程式物件能被

應用到一組實際引數的集合上,然後在新組裝的環境的上下文內解釋程式體.新的幀

有它自已的父環境,即程式物件被應用的環境部分.

2.以解釋lambda表示式的方式建立的程式與乙個給定的環境相關聯.得到的程式物件是

乙個數對,它由lambda表示式的文字和指向程式被建立的環境的指標組成.

我們也指定了定義乙個符號使用define在當前的環境幀建立乙個繫結

並且給符號賦值所示的值.最後,我們指定set!的行為,這個操作

是第一處強迫我們介紹環境模型的.解釋表示式(set! )在某個環境定位環境中的變數繫結,

並且改變繫結來指示出新的值.也就是說,在環境

的第乙個幀中發現了包括了變數的乙個繫結,修改那個幀.

如果變數在環境中沒有繫結,set!報乙個錯誤.

這些解釋規則,儘管被認為比替換模型更複雜,它仍然是很合理很自然的.

進則,解釋模型,儘管抽象,提供了乙個為直譯器如何解釋表示式的正確的描述.

在第四章中,我們將看到這個模型如何能作為實現乙個可工作的直譯器的藍圖.

如下的部分,通過分析一些示例性的程式,描述了這個模型的細節.

3 2 1 造成誤差的原因分析

比如說識別的機器學習演算法,可能會有一些被錯誤的識別了。我們要想提高準確率,可以先去分析一下到底有哪種被錯誤的的識別了。比如說有100張被錯誤的識別了,我們可以對這100張進行分類,看哪些被錯誤的識別成了貓哪些被錯誤的識別成了狗。或者是哪些,因為比較模糊兒被錯誤的識別。於是,我們就可以針對這些被錯誤...

關於thinkphp 3 2 1的問題

我在寫 後台 新建了個admin資料夾 怎麼給admin檔案裡的所有頁面設定許可權 要登入賬號密碼才能登入 這個問題比較基礎,實際上涉及到給所有php新增許可權驗證的功能 我先說說實現原理 1 訪問在指定頁面輸入賬號密碼 2 後台收到通過表單傳遞過來的資料後,通過與資料庫資料進行比對 3 如果賬號密...

模型的評估

錯誤率 如果在m個樣本中有a個樣本分類錯誤,那麼錯誤率 a m 精度 1 錯誤率 誤差 實際 輸出與樣本的真實輸出之間的差異 訓練誤差 經驗誤差 學習器在訓練集上的誤差,在很多情況下,我們都可以學得乙個經驗誤差很小,在訓練集上表現很好的學習器 泛化誤差 在新樣本上的誤差,我們希望得到的是乙個泛化誤差...