在高級編程語言與寄存器機器語言的轉(zhuǎn)換中主要有兩種方案厘熟,一種是解釋器萧朝,另一種是編譯省骂。 解釋器對高級編程語言進行邊解析邊運行的方式古戴,這有利于代碼編寫時的交互,也有利于代碼問題排查...
在高級編程語言與寄存器機器語言的轉(zhuǎn)換中主要有兩種方案厘熟,一種是解釋器萧朝,另一種是編譯省骂。 解釋器對高級編程語言進行邊解析邊運行的方式古戴,這有利于代碼編寫時的交互,也有利于代碼問題排查...
將元循環(huán)求值器轉(zhuǎn)換為寄存器機器語言手形,這樣的求值器就是 顯示控制求值器(explicit-control evaluator)牺蹄。它能夠清楚地向我們展示求值器中的存儲管理、參數(shù)傳...
在 Lisp 中列表結(jié)構(gòu)是一種常用數(shù)據(jù)結(jié)構(gòu)撮执,它的基礎(chǔ)是序?qū)ξ⒎澹瑫r序?qū)σ彩呛芏鄶?shù)據(jù)對象的基礎(chǔ)結(jié)構(gòu),為了揭示列表結(jié)構(gòu)的數(shù)據(jù)操作在計算機中的細節(jié)抒钱,我們需要研究在現(xiàn)代計算機存儲器中如...
寄存器機器 我們通過求值器解釋了編程語言運算的細節(jié)蜓肆,但由于之前講解的求值器都是基于 Lisp 語言開發(fā),所以自然繼承 Lisp 的控制結(jié)構(gòu)谋币,于是在求值器部分就沒有談到更加底層...
邏輯編程 查詢系統(tǒng)通過在數(shù)據(jù)庫中存儲斷言仗扬,并通過查詢語句推演查詢結(jié)果。而操作查詢系統(tǒng)的編程語言就是邏輯編程蕾额,它能夠向數(shù)據(jù)庫中存儲斷言早芭,使用基礎(chǔ)查詢,通過 and诅蝶、or退个、not...
非確定性計算(Nodeterministic Computing) 能夠?qū)Σ煌目赡苄赃M行探索,得出符合條件的其中一種結(jié)果调炬,除此之外语盈,非確定性計算還可以對選擇點(進行可能性選...
在元循環(huán)求值器的基礎(chǔ)上,我們能夠?qū)崿F(xiàn)變體形式 惰性求值(lazy evaluation) 器筐眷。惰性求值器能夠?qū)⒊淌絽?shù)包裝為延遲計算的表達式黎烈,使參數(shù)在應(yīng)用于程式時不會立即計算...
求值器也就是編程語言的解釋器,如果求值器是由它要運算的語言縮寫就稱為 元循環(huán)求值器(metacircular evaluator)。 求值器通過 eval 進行表達式語法分析...
流 對現(xiàn)實世界事物建模時照棋,由于事物中存在隨時間變化的狀態(tài)资溃,目前只能通過賦值和可變對象實現(xiàn)。雖然可以解決建模的問題烈炭,但由于賦值的引入帶來了許多棘手的問題溶锭,于是我們亟需一種既能完...
伴隨著賦值操作的引入,時間屬性也被同時引入了計算對象中符隙。對于非時間性的函數(shù)式編程可以通過同時運行幾組任務(wù)提高整個系統(tǒng)的計算效率趴捅,但是對于含有賦值操作的計算對象將涉及共享狀態(tài)問...
可變列表 除了普通數(shù)據(jù)對象可以使用賦值操作外,序?qū)σ灿邢鄳?yīng)的賦值操作程式霹疫,分別是 set-car! 和 set-cdr! 拱绑,能夠?qū)π驅(qū)Φ?car 對應(yīng)值和 cdr 對應(yīng)值進行...
環(huán)境模型 環(huán)境模型與之前介紹過替換模型都屬于計算模型,用于描述解釋器的運作過程丽蝎。由于程式中引入了賦值操作猎拨,導(dǎo)致替換模型難以正常運作,所以引入新的計算模型屠阻,也就是環(huán)境模型红省。 環(huán)...
命令式編程 函數(shù)式編程中的同一程式接收相同參數(shù),得到的結(jié)果將完全一致国觉,這種能夠?qū)⒊淌揭暈閿?shù)學(xué)函數(shù)表達的編程風(fēng)格便是函數(shù)式編程吧恃。 一旦在函數(shù)式編程的基礎(chǔ)上引入了賦值操作,編程風(fēng)...
強制轉(zhuǎn)換 在一個關(guān)于不同類型的通用算法系統(tǒng)中除了對同一種類型的數(shù)據(jù)進行計算外麻诀,還可能存在跨類型運算的情況痕寓,比如復(fù)數(shù)與整數(shù)的相加等。最簡單的解決方法是按如下方式實現(xiàn)一個特殊的跨...
類型標(biāo)識 數(shù)據(jù)抽象除了單一類型的情況外蝇闭,還存在多類型的數(shù)據(jù)抽象厂抽,這種情況下需要對不同類型的數(shù)據(jù)對象表現(xiàn)形式采取通用程式的手段。通用程式可以根據(jù)數(shù)據(jù)對象的具體表現(xiàn)形式將其應(yīng)用于...
標(biāo)識類型 在 Scheme 中數(shù)據(jù)的基礎(chǔ)類型除了數(shù)字類型還有標(biāo)識類型丁眼,它可以表示標(biāo)識符號本身的語法含義,而不是符號產(chǎn)生的計算結(jié)果昭殉,但是需要注意苞七,數(shù)字的標(biāo)識結(jié)果還是數(shù)字本身。 ...
閉包特性 cons 構(gòu)建的序?qū)ζ鋵嵤莾蓚€指針挪丢,分別指向序?qū)Φ膬蓚€元素蹂风,通過 car 和 cdr 獲取,cons 構(gòu)建的序?qū)Σ粌H能包含基礎(chǔ)數(shù)據(jù)乾蓬,同樣也可以包含序?qū)葑摹n愃七@種能夠...
數(shù)據(jù)抽象是為了將數(shù)據(jù)對象的結(jié)構(gòu)與數(shù)據(jù)對象的使用分離,與程式抽象類似。數(shù)據(jù)對象的結(jié)構(gòu)依靠一組構(gòu)造器和查詢器表示撵渡,但單純的構(gòu)造器和查詢器并不能表達數(shù)據(jù)對象的實質(zhì)融柬,它們還必須完全符...
lambda 表達式 lambda 表達式與 define 作用類似,可以將表達式抽象為程式趋距,不過無法命名粒氧,結(jié)構(gòu)體如下 lambda 表達式同樣可以作為表達式的操作符使用,如...
通過模型對程式的解析节腐,可以得到計算過程外盯,其中一些過程因為結(jié)構(gòu)較通用,所以被整理為典型過程供大家學(xué)習(xí)翼雀。需要注意的是饱苟,在計算過程的學(xué)習(xí)中要分清程式與過程的區(qū)別,過程是通過模型對程...