亚洲国产区中文,国产精品91高清,亚洲精品中文字幕久久久久,亚洲欧美另类久久久精品能播放

                  族譜網 頭條 人物百科

                  類型推論

                  2020-10-16
                  出處:族譜網
                  作者:阿族小譜
                  瀏覽:262
                  轉發(fā):0
                  評論:0
                  非技術性解說在大多數的編程語言中,所有值都有一個類型,它描述特定值的數據種類。在一些語言中,表達式的類型只在運行時才知道;這些語言被稱作動態(tài)類型語言。而另一些語言中,表達式的類型在編譯時就知道,這些語言叫做靜態(tài)類型語言。在靜態(tài)類型語言中,函數的輸入和輸出與局部變量的類型一般必須用類型標注明確的提供。例如,在C語言中:intaddone(intx){intresult;/*聲明整數result(C語言)*/result=x+1;returnresult;}這個函數定義開始處,intaddone(intx)聲明了addone是函數,接受一個整數類型的參數,并返回一個整數。intresult;聲明了局部變量result是個整數。在支持類型推論的建議的語言中,代碼可寫為如下:這看起來非常像在動態(tài)類型語言中寫出的代碼,但是提供了一些額外的約束(見下)使得能夠在編譯時推斷出所有變量的類型。在上面的例子...

                  非技術性解說

                  在大多數的編程語言中,所有值都有一個類型,它描述特定值的數據種類。在一些語言中,表達式的類型只在運行時才知道;這些語言被稱作動態(tài)類型語言。而另一些語言中,表達式的類型在編譯時就知道,這些語言叫做靜態(tài)類型語言。在靜態(tài)類型語言中,函數的輸入和輸出與局部變量的類型一般必須用類型標注明確的提供。例如,在C語言中:

                  intaddone(intx){intresult;/*聲明整數 result (C 語言)*/result=x+1;returnresult;}

                  這個函數定義開始處,int addone(int x) 聲明了 addone 是函數,接受一個整數類型的參數,并返回一個整數。int result; 聲明了局部變量 result 是個整數。在支持類型推論的建議的語言中,代碼可寫為如下:

                  這看起來非常像在動態(tài)類型語言中寫出的代碼,但是提供了一些額外的約束(見下)使得能夠在編譯時推斷出所有變量的類型。在上面的例子中,因為+ 總是接受兩個整數并返回一個整數。編譯器可以推論出 x+1 的值是個整數,因此 result 是個整數,addone 的返回值是個整數。類似的,因為 + 要求它的兩個實際參數都是整數,x 必須是整數,因此 addone 接受一個整數實際參數。

                  但是在隨后一行中 result2 加上了一個浮點數 "1.",導致了 x 同時用于整數和浮點數的沖突。這種情況將生成編譯時間錯誤消息。在老語言中,result2 可以被隱含的聲明為浮點變量,通過隱含的轉換表達式中的整數 x,簡單的因為小數點意外的被放到了整數 1 的后面。這種情況說明了二者之間的區(qū)別,“類型推論”不涉及類型轉換,而“隱含類型轉換”經常沒有限制的把數據強制成高精度的數據類型。

                  技術描述

                  類型推論指的是要么部分要么完全自動演繹的能力,把值的類型從表達式的最終計算中推導出來。因為這個過程在編譯時間系統(tǒng)性的進行,編譯器經常能推出變量的類型或函數的類型標署,而不用給出明確的類型標注。在很多情況下,如果推論系統(tǒng)足夠強壯或程序足夠簡單,有可能完全從程序中省略類型標注。

                  要獲得正確推導出缺乏類型標注的一個表達式的類型所必要的信息,編譯器要么隨著給它的子表達式(它們自身可以是變量或函數)的類型標注的聚集(aggregate)和后續(xù)簡約來收集這種信息,要么通過各種原子值的類型的隱含理解(比如 () : 單位; true : 布爾; 42 : 整數; 3.14159 : 實數; 等等)。通過表達式的最終簡約到隱含類型原子值的識別,類型推論語言的編譯器有能力編譯完全沒有類型標注的程序。在高階編程和多態(tài)性的高度復雜的情況下,編譯器不能總是如此推論,偶爾需要類型標注來去除歧義。

                  例子

                  例如,考慮Haskell函數 map,它把一個函數應用于一個列表的每個元素上,它可定義為:

                  明顯的函數 map 接受一個列表作為第二個實際參數,它的第一個實際參數 f 是可以應用于這個列表的元素的類型上函數,而 map 的結果被構造為其元素是 f 的結果的一列表。所以假定列表包含同樣類型的元素,我們能可靠的構造出類型標署

                  這里的語法 "a->b" 指示接受 a 作為它的形式參數并生成 b 的一個過程。 "a->b->c" 等價于 "a->(b->c)"。

                  注意 map 的推論類型是參數化多態(tài)的: 實際參數和 f 的結果的類型是不推出的,而是留作類型變量,所以 map 可以應用于各種類型的函數和列表,只要在每次調用中實際類型是匹配的。

                  Hindley–Milner 類型推論算法

                  進行類型推論的常用算法是 Hindley–Milner 或 Damas–Milner 算法。

                  這個算法的起源是 Haskell B. Curry 和 Robert Feys 在1958年為簡單類型lambda演算設計的類型推論算法。在 1969 年 Roger Hindley 擴展了這項工作并證明他們的算法總能推出最一般的類型。在 1978 年 Robin Milner,獨立于 Hindley 的工作,提供了等價的算法。在 1985 年 Luis Damas 最終證明了 Milner 的算法是完備的并擴展它來支持帶有多態(tài)引用的系統(tǒng)。

                  算法

                  算法過程分兩個步驟。首先需要生成一些要解的方程,接著解它們。

                  生成方程

                  用來生成方程的算法類似與正規(guī)的類型檢查器,所以我們首先如下有類型lambda演算的正規(guī)類型檢查器:

                  e ::= E ∣ ∣ --> v ∣ ∣ --> ( λ λ --> v : τ τ --> . e ) ∣ ∣ --> ( e e ) {\displaystyle e\,::=E\mid v\mid (\lambda v:\tau .e)\mid (e\,e)}

                  τ τ --> ::= T ∣ ∣ --> τ τ --> → → --> τ τ --> {\displaystyle \tau \,::=T\mid \tau \to \tau }

                  這里的 E {\displaystyle E} 是原始表達式 (比如 "3") 而 T {\displaystyle T} 是原始類型 (比如 "Integer")。

                  我們希望構造有類型 ( ? ? --> , t ) → → --> τ τ --> {\displaystyle (\epsilon ,t)\to \tau } 的一個函數 f {\displaystyle f} ,這里的 ? ? --> {\displaystyle \epsilon } 是類型環(huán)境而 t {\displaystyle t} 是一個項。我們假定這個函數已經定義在原始表達式上。其他情況有:

                  f ( ? ? --> , v ) = τ τ --> {\displaystyle f(\epsilon ,v)=\tau } 這里的 ( v , τ τ --> ) {\displaystyle (v,\tau )} 在 ? ? --> {\displaystyle \epsilon } 中

                  f ( ? ? --> , g e ) = τ τ --> {\displaystyle f(\epsilon ,g\,e)=\tau } 這里的 f ( ? ? --> , g ) = τ τ --> 1 → → --> τ τ --> {\displaystyle f(\epsilon ,g)=\tau _{1}\to \tau } 且 f ( ? ? --> , e ) = τ τ --> 1 {\displaystyle f(\epsilon ,e)=\tau _{1}}

                  f ( ? ? --> , λ λ --> v : τ τ --> . e ) = τ τ --> → → --> f ( ? ? --> 1 , e ) {\displaystyle f(\epsilon ,\lambda v:\tau .e)=\tau \to f(\epsilon _{1},e)} 這里的 ? ? --> 1 = ? ? --> ∪ ∪ --> ( v , τ τ --> ) {\displaystyle \epsilon _{1}=\epsilon \cup (v,\tau )}

                  注意我們至今沒有指定在不能滿足各種條件的時候做什么。這是因為,在簡單類型檢查算法中,檢查在任何事情出錯的時候都失敗。

                  現在,我們開發(fā)一個更復雜的算法來處理類型變量和在它們上的約束。所以,我們擴展原始類型的集合 T 來包括變量的無限補給,指示為小寫希臘字母 α α --> , β β --> , . . . {\displaystyle \alpha ,\beta ,...} 。詳情參見 。

                  解方程

                  解方程通過合一進行??赡芰钊梭@奇,這是個非常簡單的算法。函數 u {\displaystyle u} 運算在類型方式上并返回叫做“代換”的一個結構。代換簡單是一從類型變量到類型的一個映射。代換可以用明顯的方式組成和擴展。

                  合一方程的空集是足夠容易的: u ? ? --> = i {\displaystyle u\,\emptyset =\mathbf {i} } ,這里的 i {\displaystyle \mathbf {i} } 是同一代換。

                  合一變量與類型以如下方式進行: u ( [ α α --> = T ] ∪ ∪ --> C ) = u ( C ′ ) ? ? --> ( α α --> ? ? --> T ) {\displaystyle u\,([\alpha =T]\cup C)=u\,(C")\cdot (\alpha \mapsto T)} ,這里的 ? ? --> {\displaystyle \cdot } 是代換合成算子,而 C ′ {\displaystyle C"} 是保持約束 C {\displaystyle C} 于應用到它的新代換 α α --> ? ? --> T {\displaystyle \alpha \mapsto T} 的集合。

                  當然 u ( [ T = α α --> ] ∪ ∪ --> C ) = u ( [ α α --> = T ] ∪ ∪ --> C ) {\displaystyle u\,([T=\alpha ]\cup C)=u([\alpha =T]\cup C)} 。

                  有趣的情況保持為 u ( [ S → → --> S ′ = T → → --> T ′ ] ∪ ∪ --> C ) = u ( { [ S = T ] , [ S ′ = T ′ ] } ∪ ∪ --> C ) {\displaystyle u\,([S\to S"=T\to T"]\cup C)=u\,(\{[S=T],[S"=T"]\}\cup C)} 。


                  免責聲明:以上內容版權歸原作者所有,如有侵犯您的原創(chuàng)版權請告知,我們將盡快刪除相關內容。感謝每一位辛勤著寫的作者,感謝每一位的分享。

                  ——— 沒有了 ———
                  編輯:阿族小譜

                  更多文章

                  更多精彩文章
                  評論 {{commentTotal}} 文明上網理性發(fā)言,請遵守《新聞評論服務協議》
                  游客
                  發(fā)表評論
                  • {{item.userName}} 舉報

                    {{item.content}}

                    {{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復' : '回復'}}

                    回復評論
                  加載更多評論
                  打賞作者
                  “感謝您的打賞,我會更努力的創(chuàng)作”
                  — 請選擇您要打賞的金額 —
                  {{item.label}}
                  {{item.label}}
                  打賞成功!
                  “感謝您的打賞,我會更努力的創(chuàng)作”
                  返回
                  打賞
                  私信

                  推薦閱讀

                  · 推論
                  參見邏輯推理
                  · 推論統(tǒng)計學
                  參考文獻延伸閱讀CasellaG.BergerRL(2001).StatisticalInference.DuxburyPress.ISBN0534243126Cox,D.R.(2006).PrinciplesofStatisticalInference,CUP.ISBN0-521-68567-2Lenhard,Johannes(2006)."ModelsandStatisticalInference:TheControversybetweenFisherandNeyman—Pearson,"BritishJournalforthePhilosophyofScience,Vol.57Issue1,pp.69-91.Sudderth,WilliamD.(1994)."CoherentInferenceandPredictioninStatistics,"inPrawitz,Skyrms,an...
                  · 班固、班超的兄弟關系推論
                  班彪,班固和班超,是我國歷史上家喻戶曉的名人,因為一門父子三人都在歷史上有所作為,長期以來傳為佳話?,F行高中歷史教材中主要涉及到三班中的班固和班超。班固是東漢史學家是中歷史上第一部斷代史《漢書》的主要作者,班超是東漢著名的軍事家和外交家。班固和班超的兄弟關系一直以來眾說紛紜,然則空說無憑,盲目下定義也屬失察失責,以下推論乞共商唷翻開《辭?!?,找到班固、班超的介紹如下:班固(公元32―92)字孟堅。扶風安陵(今陜西咸陽東北)人。東漢史學家。班超(公元32―102),字仲升,扶風安陵(今陜西咸陽東北)人,東漢著名的軍事家和外交家。由此疑問:班固班超是同年出生的兄弟。那么到底班固、班超他們究竟是一種什么樣的兄弟關系呢?在正式分析之前,我們首先必須要知道,以上所列材料應該沒有問題。班固、班超的兄弟關系是在《漢書》中記載的,班固是《漢書》的主要作者;關于他們在世時間的介紹,包括《辭海》在內的幾本權威...
                  · 類型安全
                  定義RobinMilner對于類型安全所喊出的口號:這一口號的涵義,取決于語言形式化語義的類別。在指稱語義學里,類型安全意謂者一個表達式的值具有良好類型τ,則表達式是一個屬于τ的集合的真正的成員。1994年,AndrewWright和MatthiasFelleisen以操作語義學定義的公式描述:何謂現今的標準定義,以及對于類型安全的檢驗技術。根據上述方法,類型安全是以編程語言語義中的兩個性質所決定的:這些性質不是無中生有的,而是和編程語言所描述出來的語義相連系,而且各式各樣的語言存在著可以此基準來充實的廣大的空間。因為“類型良好”程序的概念已是靜態(tài)語義學的一部分,而“卡住”(或者“搞錯”)則是動態(tài)語義學方面的屬性。語言的類型安全性學術研究用途的玩具語言,常會提出類型安全方面的需求。另一方面,許多語言以人工方式所產生的類型安全,證實經常需要上千次的檢查。不過,某些語言,如標準ML,其嚴格定義...
                  · 類型論
                  類型論體系主要簡單類型λ演算,一種高階邏輯;直覺類型論;系統(tǒng)F;LF經常用來定義其他類型論;構造演算及其派生理論。次要Automath(英語:Automath);ST類型論;組合邏輯的一些形式;λ立方體(英語:Lambdacube)中定義的其他;其他有類型λ演算;其他純類型系統(tǒng)(英語:puretypesystem)?;钴S正在研究中的同倫類型論參考文獻延伸閱讀Andrews,PeterB.,2002.AnIntroductiontoMathematicalLogicandTypeTheory:ToTruthThroughProof,2nded.KluwerAcademicPublishers.Cardelli,Luca,1997,"TypeSystems,"inAllenB.Tucker,ed.,TheComputerScienceandEngineeringHandbook.CRCPres...

                  關于我們

                  關注族譜網 微信公眾號,每日及時查看相關推薦,訂閱互動等。

                  APP下載

                  下載族譜APP 微信公眾號,每日及時查看
                  掃一掃添加客服微信