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 錯誤率 誤差 實際 輸出與樣本的真實輸出之間的差異 訓練誤差 經驗誤差 學習器在訓練集上的誤差,在很多情況下,我們都可以學得乙個經驗誤差很小,在訓練集上表現很好的學習器 泛化誤差 在新樣本上的誤差,我們希望得到的是乙個泛化誤差...