




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
4. 一直用 基本求值過程的實(shí)現(xiàn),apply SchemeSchemeScheme系統(tǒng)(的支持)但實(shí)際可行:Scheme表達(dá)式的求值也是一種計(jì)算。如果一個(gè)語言Scheme解釋器。SchemeScheme表達(dá)式求值也是一些符號(hào)操作,SchemeLisp方言都特別Scheme程序求值的狀態(tài) eval負(fù)責(zé)表達(dá)式求值,apply相互遞歸調(diào)用,evalevalapplyassignment-variableassignment-valuemake-procedure構(gòu)造復(fù)合過程(構(gòu)造過程對(duì)象lookup-variable-value取變量的值(在環(huán)境中檢索apply-primitive-procedureevalapply evalexpenvexpbegincondif過程和所有實(shí)參送給apply,要求執(zhí)行過程應(yīng)用 (define(evalexp(cond((self-evaluating?exp)((variable?exp)(lookup-variable-valueexpenv))((quoted?exp)(text-of-quotationexp))((assignment?exp)(eval-assignmentexpenv))((definition?exp)(eval-definitionexpenv))((if?exp)(eval-ifexp((lambda?(make-procedure(lambda-parameters(lambda-bodyexp)((begin?
(eval-sequence(begin-actionsexp)env))((coexp(eval(cond->ifexpenv))((applicatione工作更方便(apply(eval(operatorexp)env)
(list-of-values(operandsexp)
(error"Unknownexpressiontype--EVAL" apply-primitive-procedure(define(applyprocedurearguments)(cond((primitive-procedure?procedure)(apply-primitive-procedureprocedurearguments))((compound-procedure?procedure)(eval-(procedure-bodyprocedure)(procedure-parametersprocedure)(procedure-environment(error"Unknownproceduretype--APPLY" eval(define(list-of-valuesexpsenv)(if(no-operands?exps)(cons(eval(first-operandexps)(list-of-values(rest-operandsexps) eval-if(define(eval-ifexp(if(true?(eval(if-predicateexp)env))(eval(if-consequentexp)env)(eval(if-alternativeexp)env)))true?(Scheme)里 (define(eval-assignmentexp(set-variable-value!(assignment-variable(eval(assignment-valueexp)env)(define(eval-definitionexp(define-variable!(definition-variable(eval(definition-valueexp)env)分別由! lambda體(過程體begincond(define(eval-sequenceexps(cond((last-exp?exps)(eval(first-expexps)env))(else(eval(first-expexps)env)(eval-sequence(rest-expsexps) (define(self-evaluating?exp)(cond((number?exp)true)((string?exp)true)(elsefalse)))(define(variable?exp)(symbol? (define(tagged-list?exptag)(if(pair?exp)(eq?(carexp)tag)(quotetext-of-quotation的語法過程:(define(quoted?exp)(tagged-list?exp'quote))(define(text-of-quotationexp)(cadrexp))(setvarvalue的語法過程(define(assignment?exp)(tagged-list?exp'set!))(define(assignment-variableexp)(cadrexp))(define(assignment-valueexp)(caddrexp)) 定義表達(dá)式有兩種形式:(define<var><value>)(define(<var><parameter1>...<parametern>)(define<var>(lambda(<parameter1>...<parametern>)(define(definition?exp)(tagged-list?exp'define))(define(definition-variableexp)(if(symbol?(cadr(cadrexp)(caadrexp)))(define(definition-valueexp)(if(symbol?(cadrexp))(caddr(make-lambda(cdadr ;formal(cddrexp)))); (define(lambda?exp)(tagged-list?exp'lambda))(define(lambda-parametersexp)(cadrexp))(define(lambda-bodyexp)(cddrexp))(define(make-lambdaparametersbody)(cons'lambda(consparametersbody))) (define(if?exp)(tagged-list?exp'if))(define(if-predicateexp)(cadrexp))(define(if-consequentexp)(caddrexp))(define(if-alternativeexp)(if(not(null?(cdddrexp)))(cadddrexp)if表達(dá)式的構(gòu)造函數(shù)(cond時(shí)要用(define(make-ifpredicateconsequentalternative)(list'ifpredicateconsequentalternative)) begin包裝一系列表達(dá)式,要求對(duì)它們順序求值:(define(begin?exp)(tagged-list?expbegin))(define(begin-actionsexp)(cdrexp))(define(last-exp?seq)(null?(cdrseq)))(define(first-expseq)(carseq))(define(rest-expsseq)(cdrsequence->exp(cond->if里),它把包含多個(gè)表達(dá)式的序列包裝為一個(gè)begin表達(dá)式:(define(sequence->expseq)(cond((null?seq)seq)((last-exp?seq)(first-expseq))(else(make-beginseq))))(define(make-beginseq)(cons'begin (define(application?exp)(pair?exp))(define(operatorexp)(carexp))(define(operandsexp)(cdrexp))(define(no-operands?ops)(null?ops))(define(first-operandops)(carops))(define(rest-operandsops)(cdrops))cond等 condifcond(define(cond?exp)(tagged-list?exp'cond))(define(cond-clausesexp)(cdrexp))(define(cond-else-clause?clause)(eq?(cond-predicateclause)'else))(define(cond-predicateclause)(carclause)) ;noelse(let((first(carclauses))(if(null?rest)(sequence->exp(cond-actionsfirst))(error"ELSEclauseisn'tlast--COND->IF"(expand-clausesrest)))))) false對(duì)象都當(dāng)作邏輯真(define(true?x)(not(eq?xfalse)))(define(false?x)(eq?xfalse))(apply-primitive-procedureproc><args>)(primitive-procedure?proc>)(define(make-procedureparametersbodyenv)(list'procedureparametersbodyenv))(define(compound-procedure?p)(tagged-list?p'procedure))(define(procedure-parametersp)(cadrp))(define(procedure-bodyp)(caddr(define(procedure-environmentp)(cadddr (lookup-variable-value<var>>>(extend-environment<variables><values><base->>(define-variable!<var><value><env<var<value(set-variable-value!<var><value>>>> (define(first-frameenv)(car(define(enclosing-environmentenv)(cdrenv))(definethe-empty-environment'())car是變量表,cdr(define(make-framevariablesvalues)(consvariablesvalues))(define(frame-variablesframe)(carframe))(define(frame-valuesframe)(cdr(define(add-binding-to-frame!varvalframe)(set-car!frame(consvar(carframe)))(set-cdr!frame(consval(cdr (define(extend-environmentvarsvalsbase-env)(if(=(lengthvars)(lengthvals))(cons(make-framevarsvals)base-env)(if(<(lengthvars)(lengthvals))(error"Toomanyargumentssupplied"varsvals)(error"Toofewargumentssupplied"varsvals)))) (define(lookup-variable-valuevarenv0)(define(env-loopenv)(define(scanvarsvals)(cond((null?vars)(env-loop(enclosing-environmentenv)))((eq?var(carvars))(carvals))(else(scan(cdrvars)(cdrvals)))))(if(eq?envthe-empty-environment)(error"Unboundvariable"var)(let((frame(first-frameenv)))(scan(frame-variablesframe)(frame-values(env-loop (define(set-variable-value!varvalenv0)(define(env-loopenv)(define(scanvarsvals)(cond((null?vars)(env-loop(enclosing-environmentenv)))((eq?var(carvars))(set-car!valsval))(else(scan(cdrvars)(cdrvals)))))(if(eq?envthe-empty-environment)(error"Unboundvariable--SET!"var)(let((frame(first-frameenv)))(scan(frame-variablesframe)(frame-valuesframe)))))(env-loopenv0)) (define(define-variable!varvalenv)(let((frame(first-frameenv)))(define(scanvarsvals)(cond((null?(add-binding-to-frame!varvalframe))((eq?var(carvars))(set-car!valsval))(else(scan(cdrvars)(cdr(scan(frame-variablesframe)(frame-values Scheme求值模型的一個(gè)嚴(yán)格描述(Scheme語eval在求值中能找到相應(yīng)過程對(duì)象并把它傳給apply聯(lián),還需要包含true和false等符號(hào)(名字)的約束 (define(setup-environment)(let((initial-env(extend-environment(primitive-procedure-(define-variable!'truetrueinitial-env)(define-variable!'falsefalseinitial-env)(definethe-global-environment(setup-apply能識(shí)別這一類別,而后 (define(primitive-procedure?proc)(tagged-list?proc'primitive))(define(primitive-implementationproc)(cadrproc))(defineprimitive-procedures(list(list'carcar)(list'cdrcdr)(list'conscons)(list'null?<more(define(primitive-procedure-names)(mapcarprimitive-procedures))(define(primitive-procedure-(map(lambda(proc)(list'primitive(cadrproc))) (define(apply-primitive-procedureprocargs)(primitive-implementationproc)apply-in-underlying-schemeScheme(defineapply-in-underlying-schemeapply-primitive-procedure就可以調(diào)用到基礎(chǔ)系統(tǒng)里原來的apply基本過程 Scheme系統(tǒng),給元循環(huán)求值器定義一個(gè)基本(defineinput-prompt";;;M-Eval(defineoutput-prompt";;;M-Evalvalue:")(define(driver-loop)(prompt-for-inputinput-prompt)(let((input(read)))(let((output(evalinputthe-global-environment)))(announce-outputoutput-prompt)(user-printoutput)))(define(prompt-for-input(newline)(newline)(displaystring)(define(announce-outputstring)(newline)(displaystring)(newline
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國集線器市場(chǎng)運(yùn)行動(dòng)態(tài)與發(fā)展前景分析報(bào)告
- 2025-2030年中國鋁板帶箔材行業(yè)運(yùn)營狀況及發(fā)展規(guī)劃分析報(bào)告
- 2025-2030年中國造影劑行業(yè)市場(chǎng)運(yùn)行狀況及前景趨勢(shì)分析報(bào)告
- 重慶師范大學(xué)《酒水與酒吧管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏大學(xué)新華學(xué)院《植物細(xì)胞工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)南大學(xué)《管理研究方法導(dǎo)讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北工業(yè)大學(xué)《中學(xué)思想政治教育學(xué)科教育學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津體育職業(yè)學(xué)院《勘查地球物理方法及應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆機(jī)電職業(yè)技術(shù)學(xué)院《現(xiàn)場(chǎng)總線技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 忻州職業(yè)技術(shù)學(xué)院《戰(zhàn)略與公司管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 語文學(xué)習(xí)任務(wù)群的解讀及設(shè)計(jì)要領(lǐng)
- 2024年山東省高考生物試卷真題(含答案解析)
- 光伏發(fā)電站項(xiàng)目安全技術(shù)交底資料
- 富血小板血漿(PRP)臨床實(shí)踐與病例分享課件
- 光伏工程施工組織設(shè)計(jì)
- 《護(hù)理科研》課件
- 人教版(2024新版)八年級(jí)上冊(cè)物理《開啟科學(xué)探索之旅》教學(xué)設(shè)計(jì)
- 年產(chǎn)1萬噸的二氧化碳捕集及資源化利用全流程示范項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 部編版語文四年級(jí)下冊(cè)第六單元大單元作業(yè)設(shè)計(jì)
- 小學(xué)二年級(jí)上冊(cè)數(shù)學(xué)思維訓(xùn)練題100道及答案解析
- 2024至2030年中國細(xì)胞農(nóng)業(yè)動(dòng)向追蹤與發(fā)展前景現(xiàn)狀探索報(bào)告
評(píng)論
0/150
提交評(píng)論