SICP · Yr ail argraffiad · Scheme
3.2 Y Model Amgylchedd o Werthuso
Pan gyflwynasom weithdrefnau cyfansawdd ym Mhennod 1, defnyddiasom y model amnewid o werthuso (1.1.5) i ddiffinio beth a olygir wrth gymhwyso gweithdrefn i argiau:
- I gymhwyso gweithdrefn gyfansawdd i argiau, gwerthuswch gorff y weithdrefn gan roi'r arg cyfatebol yn lle pob paramedr ffurfiol.
Ar ôl inni ganiatáu aseiniad yn ein hiaith raglennu, nid yw diffiniad o'r fath yn ddigonol bellach. Yn benodol, dadleuodd 3.1.3 na ellir, ym mhresenoldeb aseiniad, ystyried newidyn yn enw am werth yn unig mwyach. Yn hytrach, rhaid i newidyn rywsut ddynodi “man” lle gellir storio gwerthoedd. Yn ein model gwerthuso newydd, cedwir y mannau hyn mewn strwythurau a elwir yn amgylcheddau.
Dilyniant o fframiau yw amgylchedd. Mae pob ffrâm yn dabl (a all fod yn wag) o rwymiadau, sy'n cysylltu enwau newidynnau â'u gwerthoedd cyfatebol. (Gall un ffrâm gynnwys, ar y mwyaf, un rhwymiad i unrhyw newidyn.) Mae gan bob ffrâm hefyd bwyntydd at ei hamgylchedd amgylchynol, oni bai, at ddibenion y drafodaeth, yr ystyrir y ffrâm yn fyd-eang. Gwerth newidyn mewn perthynas ag amgylchedd yw'r gwerth a roddir gan rwymiad y newidyn yn y ffrâm gyntaf yn yr amgylchedd sy'n cynnwys rhwymiad i'r newidyn hwnnw. Os nad oes unrhyw ffrâm yn y dilyniant yn nodi rhwymiad i'r newidyn, dywedir bod y newidyn heb ei rwymo yn yr amgylchedd.
Mae Ffigur 3.1 yn dangos strwythur amgylchedd syml sy'n cynnwys tair ffrâm, wedi'u labelu I, II, a III. Yn y diagram, mae A, B, C, a D yn bwyntyddion at amgylcheddau. Mae C a D yn pwyntio at yr un amgylchedd. Mae'r newidynnau z ac x wedi'u rhwymo yn ffrâm II, tra bod y ac x wedi'u rhwymo yn ffrâm I. Gwerth x yn amgylchedd D yw 3. Gwerth x mewn perthynas ag amgylchedd B hefyd yw 3. Pennir hyn fel a ganlyn: Archwiliwn y ffrâm gyntaf yn y dilyniant (ffrâm III) ac ni chanfyddwn rwymiad i x, felly awn ymlaen i'r amgylchedd amgylchynol D a chanfod y rhwymiad yn ffrâm I. Ar y llaw arall, gwerth x yn amgylchedd A yw 7, am fod y ffrâm gyntaf yn y dilyniant (ffrâm II) yn cynnwys rhwymiad o x i 7. Mewn perthynas ag amgylchedd A, dywedir bod rhwymiad x i 7 yn ffrâm II yn cysgodi rhwymiad x i 3 yn ffrâm I.
Ffigur 3.1: Strwythur amgylchedd syml.
Mae'r amgylchedd yn hanfodol i'r broses werthuso, am ei fod yn pennu'r cyd-destun y dylid gwerthuso mynegiad ynddo. Yn wir, gellid dweud nad oes gan fynegiadau mewn iaith raglennu unrhyw ystyr ynddynt eu hunain. Yn hytrach, dim ond mewn perthynas â rhyw amgylchedd y caiff ei werthuso ynddo y mae mynegiad yn ennill ystyr. Mae hyd yn oed dehongli mynegiad mor syml ag (+ 1 1) yn dibynnu ar ddeall ein bod yn gweithio mewn cyd-destun lle mai + yw'r symbol ar gyfer adio. Felly, yn ein model gwerthuso byddwn bob amser yn sôn am werthuso mynegiad mewn perthynas â rhyw amgylchedd. I ddisgrifio rhyngweithiadau â'r dehonglydd, tybiwn fod amgylchedd byd-eang, sy'n cynnwys un ffrâm (heb amgylchedd amgylchynol), sy'n cynnwys gwerthoedd i'r symbolau sy'n gysylltiedig â'r gweithdrefnau cyntefig. Er enghraifft, mynegir y syniad mai + yw'r symbol ar gyfer adio drwy ddweud bod y symbol + wedi'i rwymo yn yr amgylchedd byd-eang i'r weithdrefn adio gyntefig.
3.2.1Y Rheolau Gwerthuso
Mae'r fanyleb gyffredinol o sut mae'r dehonglydd yn gwerthuso cyfuniad yn aros yr un fath â phan gyflwynasom hi gyntaf yn 1.1.3:
- I werthuso cyfuniad:
- Gwerthuswch isfynegiadau'r cyfuniad.140
- Cymhwyswch werth isfynegiad y gweithredydd i werthoedd isfynegiadau'r operandau.
Mae'r model amgylchedd o werthuso yn cymryd lle'r model amnewid wrth bennu beth yw ystyr cymhwyso gweithdrefn gyfansawdd i argiau.
Yn y model amgylchedd o werthuso, mae gweithdrefn bob amser yn bâr sy'n cynnwys rhywfaint o god a phwyntydd at amgylchedd. Dim ond mewn un ffordd y crëir gweithdrefnau: drwy werthuso mynegiad λ. Mae hyn yn cynhyrchu gweithdrefn y ceir ei chod o destun y mynegiad λ, ac y mae ei hamgylchedd yr un amgylchedd ag y gwerthuswyd y mynegiad λ ynddo i gynhyrchu'r weithdrefn. Er enghraifft, ystyriwch y diffiniad gweithdrefn
(define (square x)
(* x x))o'i werthuso yn yr amgylchedd byd-eang. Nid yw cystrawen diffinio gweithdrefn ond yn siwgr cystrawennol ar gyfer mynegiad λ ymhlyg oddi tani. Byddai wedi bod yn gyfwerth defnyddio
(define square
(lambda (x) (* x x)))sy'n gwerthuso (lambda (x) (* x x)) ac yn rhwymo square i'r gwerth a geir, a'r cyfan yn yr amgylchedd byd-eang.
Mae Ffigur 3.2 yn dangos canlyniad gwerthuso'r mynegiad define hwn. Mae gwrthrych y weithdrefn yn bâr y mae ei god yn nodi bod gan y weithdrefn un paramedr ffurfiol, sef x, a chorff gweithdrefn (* x x). Pwyntydd at yr amgylchedd byd-eang yw rhan amgylchedd y weithdrefn, gan mai dyna'r amgylchedd y gwerthuswyd y mynegiad λ ynddo i gynhyrchu'r weithdrefn. Mae rhwymiad newydd, sy'n cysylltu gwrthrych y weithdrefn â'r symbol square, wedi'i ychwanegu at y ffrâm fyd-eang. Yn gyffredinol, mae define yn creu diffiniadau drwy ychwanegu rhwymiadau at fframiau.
Ffigur 3.2: Strwythur amgylchedd a gynhyrchir drwy werthuso (define (square x) (* x x)) yn yr amgylchedd byd-eang.
Nawr ein bod wedi gweld sut y crëir gweithdrefnau, gallwn ddisgrifio sut y cymhwysir hwy. Mae'r model amgylchedd yn nodi: I gymhwyso gweithdrefn i argiau, crëwch amgylchedd newydd sy'n cynnwys ffrâm sy'n rhwymo'r paramedrau i werthoedd yr argiau. Amgylchedd amgylchynol y ffrâm hon yw'r amgylchedd a nodir gan y weithdrefn. Nawr, o fewn yr amgylchedd newydd hwn, gwerthuswch gorff y weithdrefn.
I ddangos sut y dilynir y rheol hon, mae Ffigur 3.3 yn darlunio'r strwythur amgylchedd a grëir drwy werthuso'r mynegiad (square 5) yn yr amgylchedd byd-eang, lle mai square yw'r weithdrefn a gynhyrchwyd yn Ffigur 3.2. Mae cymhwyso'r weithdrefn yn arwain at greu amgylchedd newydd, wedi'i labelu E1 yn y ffigur, sy'n dechrau â ffrâm lle mae x, paramedr ffurfiol y weithdrefn, wedi'i rwymo i'r arg 5. Mae'r pwyntydd sy'n mynd i fyny o'r ffrâm hon yn dangos mai'r amgylchedd byd-eang yw amgylchedd amgylchynol y ffrâm. Dewisir yr amgylchedd byd-eang yma am mai hwn yw'r amgylchedd a nodir yn rhan o wrthrych y weithdrefn square. O fewn E1, gwerthuswn gorff y weithdrefn, (* x x). Gan mai 5 yw gwerth x yn E1, y canlyniad yw (* 5 5), neu 25.
Ffigur 3.3: Amgylchedd a grëir drwy werthuso (square 5) yn yr amgylchedd byd-eang.
Gellir crynhoi'r model amgylchedd o gymhwyso gweithdrefn mewn dwy reol:
- Cymhwysir gwrthrych gweithdrefn i set o argiau drwy adeiladu ffrâm, rhwymo paramedrau ffurfiol y weithdrefn i argiau'r alwad, ac yna gwerthuso corff y weithdrefn yng nghyd-destun yr amgylchedd newydd a adeiladwyd. Amgylchedd amgylchynol y ffrâm newydd yw rhan amgylchedd gwrthrych y weithdrefn sy'n cael ei gymhwyso.
- Crëir gweithdrefn drwy werthuso mynegiad λ mewn perthynas ag amgylchedd penodol. Mae gwrthrych y weithdrefn a geir yn bâr sy'n cynnwys testun y mynegiad λ a phwyntydd at yr amgylchedd y crëwyd y weithdrefn ynddo.
Nodwn hefyd fod diffinio symbol gan ddefnyddio define yn creu rhwymiad yn ffrâm bresennol yr amgylchedd ac yn aseinio'r gwerth a nodir i'r symbol.141 Yn olaf, nodwn ymddygiad set!, y gweithrediad a'n gorfododd i gyflwyno'r model amgylchedd yn y lle cyntaf. Mae gwerthuso'r mynegiad (set! ⟨variable⟩ ⟨value⟩) mewn rhyw amgylchedd yn lleoli rhwymiad y newidyn yn yr amgylchedd ac yn newid y rhwymiad hwnnw i ddynodi'r gwerth newydd. Hynny yw, ceir hyd i'r ffrâm gyntaf yn yr amgylchedd sy'n cynnwys rhwymiad i'r newidyn, ac addasir y ffrâm honno. Os yw'r newidyn heb ei rwymo yn yr amgylchedd, yna mae set! yn arwyddo gwall.
Mae'r rheolau gwerthuso hyn, er eu bod yn sylweddol fwy cymhleth na'r model amnewid, yn dal yn weddol syml. Ar ben hynny, mae'r model gwerthuso, er ei fod yn haniaethol, yn rhoi disgrifiad cywir o sut mae'r dehonglydd yn gwerthuso mynegiadau. Ym Mhennod 4 cawn weld sut y gall y model hwn wasanaethu'n lasbrint ar gyfer gweithredu dehonglydd sy'n gweithio. Mae'r adrannau canlynol yn ymhelaethu ar fanylion y model drwy ddadansoddi rhai rhaglenni enghreifftiol.
3.2.2Cymhwyso Gweithdrefnau Syml
Pan gyflwynasom y model amnewid yn 1.1.5, dangosasom sut mae'r cyfuniad (f 5) yn gwerthuso i 136, o gael y diffiniadau gweithdrefn canlynol:
(define (square x)
(* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (f a)
(sum-of-squares (+ a 1) (* a 2)))Gallwn ddadansoddi'r un enghraifft gan ddefnyddio'r model amgylchedd. Mae Ffigur 3.4 yn dangos y tri gwrthrych gweithdrefn a grëir drwy werthuso diffiniadau f, square, ac sum-of-squares yn yr amgylchedd byd-eang. Mae pob gwrthrych gweithdrefn yn cynnwys rhywfaint o god, ynghyd â phwyntydd at yr amgylchedd byd-eang.
Ffigur 3.4: Gwrthrychau gweithdrefn yn y ffrâm fyd-eang.
Yn Ffigur 3.5 gwelwn y strwythur amgylchedd a grëir drwy werthuso'r mynegiad (f 5). Mae'r alwad i f yn creu amgylchedd newydd E1 sy'n dechrau â ffrâm lle mae a, paramedr ffurfiol f, wedi'i rwymo i'r arg 5. Yn E1, gwerthuswn gorff f:
(sum-of-squares (+ a 1) (* a 2))Ffigur 3.5: Amgylcheddau a grëir drwy werthuso (f 5) gan ddefnyddio y gweithdrefnau yn Ffigur 3.4.
I werthuso'r cyfuniad hwn, gwerthuswn yr isfynegiadau yn gyntaf. Mae gan yr isfynegiad cyntaf, sum-of-squares, werth sy'n wrthrych gweithdrefn. (Sylwch sut y ceir y gwerth hwn: Edrychwn yn gyntaf yn ffrâm gyntaf E1, nad yw'n cynnwys rhwymiad i sum-of-squares. Yna awn ymlaen i'r amgylchedd amgylchynol, h.y. yr amgylchedd byd-eang, a chanfod y rhwymiad a ddangosir yn Ffigur 3.4.) Gwerthusir y ddau isfynegiad arall drwy gymhwyso'r gweithrediadau cyntefig + ac * i werthuso'r ddau gyfuniad (+ a 1) ac (* a 2), gan gael 6 a 10, yn y drefn honno.
Nawr cymhwyswn y gwrthrych gweithdrefn sum-of-squares i'r argiau 6 a 10. Mae hyn yn arwain at amgylchedd newydd E2 lle mae'r paramedrau ffurfiol x ac y wedi'u rhwymo i'r argiau. O fewn E2 gwerthuswn y cyfuniad (+ (square x) (square y)). Mae hyn yn ein harwain i werthuso (square x), lle ceir square yn y ffrâm fyd-eang a lle mae x yn 6. Unwaith eto, sefydlwn amgylchedd newydd, E3, lle mae x wedi'i rwymo i 6, ac ynddo gwerthuswn gorff square, sef (* x x). Hefyd yn rhan o gymhwyso sum-of-squares, rhaid inni werthuso'r isfynegiad (square y), lle mae y yn 10. Mae'r ail alwad hon i square yn creu amgylchedd arall, E4, lle mae x, paramedr ffurfiol square, wedi'i rwymo i 10. Ac o fewn E4 rhaid inni werthuso (* x x).
Y pwynt pwysig i'w nodi yw bod pob galwad i square yn creu amgylchedd newydd sy'n cynnwys rhwymiad i x. Gallwn weld yma sut mae'r gwahanol fframiau'n cadw ar wahân y gwahanol newidynnau lleol sydd i gyd â'r enw x. Sylwch fod pob ffrâm a grëir gan square yn pwyntio at yr amgylchedd byd-eang, gan mai hwn yw'r amgylchedd a ddynodir gan y gwrthrych gweithdrefn square.
Ar ôl gwerthuso'r isfynegiadau, dychwelir y canlyniadau. Adir y gwerthoedd a gynhyrchir gan y ddwy alwad i square gan sum-of-squares, a dychwelir y canlyniad hwn gan f. Gan ein bod yn canolbwyntio yma ar y strwythurau amgylchedd, ni fyddwn yn aros ar sut y caiff y gwerthoedd a ddychwelir eu pasio o alwad i alwad; fodd bynnag, mae hyn hefyd yn agwedd bwysig ar y broses werthuso, a dychwelwn ato'n fanwl ym Mhennod 5.
Ymarfer 3.9: Yn 1.2.1 defnyddiasom y model amnewid i ddadansoddi dwy weithdrefn ar gyfer cyfrifo ffactorialau, fersiwn ddychweliadol
(define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1)))))a fersiwn sy'n iteru
(define (factorial n) (fact-iter 1 1 n)) (define (fact-iter product counter max-count) (if (> counter max-count) product (fact-iter (* counter product) (+ counter 1) max-count)))Dangoswch y strwythurau amgylchedd a grëir drwy werthuso
(factorial 6)gan ddefnyddio pob fersiwn o'r weithdrefnfactorial.142
3.2.3Fframiau fel Storfa Cyflwr Lleol
Gallwn droi at y model amgylchedd i weld sut y gellir defnyddio gweithdrefnau ac aseiniad i gynrychioli gwrthrychau â chyflwr lleol. Yn enghraifft, ystyriwch y “prosesydd codi arian” o 3.1.1 a grëir drwy alw'r weithdrefn
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance
(- balance amount))
balance)
"Insufficient funds")))Gadewch inni ddisgrifio gwerthuso
(define W1 (make-withdraw 100))ac yna
(W1 50)
50
Mae Ffigur 3.6 yn dangos canlyniad diffinio'r weithdrefn make-withdraw yn yr amgylchedd byd-eang. Mae hyn yn cynhyrchu gwrthrych gweithdrefn sy'n cynnwys pwyntydd at yr amgylchedd byd-eang. Hyd yma, nid yw hyn yn wahanol i'r enghreifftiau a welsom eisoes, ac eithrio bod corff y weithdrefn ei hun yn fynegiad λ.
Ffigur 3.6: Canlyniad diffinio make-withdraw yn yr amgylchedd byd-eang.
Mae rhan ddiddorol y cyfrifiad yn digwydd pan gymhwyswn y weithdrefn make-withdraw i arg:
(define W1 (make-withdraw 100))Dechreuwn, fel arfer, drwy sefydlu amgylchedd E1 lle mae'r paramedr ffurfiol balance wedi'i rwymo i'r arg 100. O fewn yr amgylchedd hwn, gwerthuswn gorff make-withdraw, sef y mynegiad λ. Mae hyn yn adeiladu gwrthrych gweithdrefn newydd, y mae ei god fel y'i nodir gan lambda a'i amgylchedd yn E1, sef yr amgylchedd y gwerthuswyd lambda ynddo i gynhyrchu'r weithdrefn. Gwrthrych y weithdrefn a geir yw'r gwerth a ddychwelir gan yr alwad i make-withdraw. Rhwymir hwn i W1 yn yr amgylchedd byd-eang, gan fod define ei hun yn cael ei werthuso yn yr amgylchedd byd-eang. Mae Ffigur 3.7 yn dangos y strwythur amgylchedd a geir.
Ffigur 3.7: Canlyniad gwerthuso (define W1 (make-withdraw 100)).
Nawr gallwn ddadansoddi beth sy'n digwydd pan gymhwysir W1 i arg:
(W1 50)
50
Dechreuwn drwy adeiladu ffrâm lle mae amount, paramedr ffurfiol W1, wedi'i rwymo i'r arg 50. Y pwynt hollbwysig i'w nodi yw nad yr amgylchedd byd-eang yw amgylchedd amgylchynol y ffrâm hon, ond yn hytrach yr amgylchedd E1, am mai hwn yw'r amgylchedd a nodir gan y gwrthrych gweithdrefn W1. O fewn yr amgylchedd newydd hwn, gwerthuswn gorff y weithdrefn:
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")Dangosir y strwythur amgylchedd a geir yn Ffigur 3.8. Mae'r mynegiad sy'n cael ei werthuso yn cyfeirio at amount ac balance. Ceir Amount yn y ffrâm gyntaf yn yr amgylchedd, tra ceir balance drwy ddilyn y pwyntydd at yr amgylchedd amgylchynol E1.
Ffigur 3.8: Amgylcheddau a grëir drwy gymhwyso'r gwrthrych gweithdrefn W1.
Pan weithredir set!, newidir rhwymiad balance yn E1. Ar ddiwedd yr alwad i W1, mae balance yn 50, ac mae'r gwrthrych gweithdrefn W1 yn dal i bwyntio at y ffrâm sy'n cynnwys balance. Nid yw'r ffrâm sy'n rhwymo amount (lle gweithredasom y cod a newidiodd balance) yn berthnasol bellach, gan fod yr alwad gweithdrefn a'i hadeiladodd wedi dod i ben, ac nad oes pwyntyddion at y ffrâm honno o rannau eraill o'r amgylchedd. Y tro nesaf y gelwir W1, bydd hyn yn adeiladu ffrâm newydd sy'n rhwymo amount ac sydd ag E1 yn amgylchedd amgylchynol iddi. Gwelwn fod E1 yn gwasanaethu fel y “man” sy'n dal newidyn cyflwr lleol y gwrthrych gweithdrefn W1. Mae Ffigur 3.9 yn dangos y sefyllfa ar ôl yr alwad i W1.
Ffigur 3.9: Amgylcheddau ar ôl yr alwad i W1.
Sylwch beth sy'n digwydd pan grëwn ail wrthrych “codi arian” drwy wneud galwad arall i make-withdraw:
(define W2 (make-withdraw 100))Mae hyn yn cynhyrchu strwythur amgylchedd Ffigur 3.10, sy'n dangos bod W2 yn wrthrych gweithdrefn, hynny yw, pâr â rhywfaint o god ac amgylchedd. Crëwyd yr amgylchedd E2 ar gyfer W2 gan yr alwad i make-withdraw. Mae'n cynnwys ffrâm â'i rhwymiad lleol ei hun i balance. Ar y llaw arall, mae gan W1 ac W2 yr un cod: y cod a nodir gan y mynegiad λ yng nghorff make-withdraw.143 Gwelwn yma pam mae W1 ac W2 yn ymddwyn fel gwrthrychau annibynnol. Mae galwadau i W1 yn cyfeirio at y newidyn cyflwr balance a storir yn E1, tra bod galwadau i W2 yn cyfeirio at yr balance a storir yn E2. Felly, nid yw newidiadau i gyflwr lleol un gwrthrych yn effeithio ar y gwrthrych arall.
Ffigur 3.10: Defnyddio (define W2 (make-withdraw 100)) i greu ail wrthrych.
Ymarfer 3.10: Yn y weithdrefn
make-withdraw, crëir y newidyn lleolbalanceyn baramedr imake-withdraw. Gallem hefyd greu'r newidyn cyflwr lleol yn benodol, gan ddefnyddiolet, fel a ganlyn:(define (make-withdraw initial-amount) (let ((balance initial-amount)) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds"))))Cofiwch o 1.3.2 nad yw
letond yn siwgr cystrawennol ar gyfer galwad gweithdrefn:(let ((⟨var⟩ ⟨exp⟩)) ⟨body⟩)a ddehonglir yn gystrawen arall ar gyfer
((lambda (⟨var⟩) ⟨body⟩) ⟨exp⟩)Defnyddiwch y model amgylchedd i ddadansoddi'r fersiwn amgen hon o
make-withdraw, gan dynnu ffigurau fel y rhai uchod i ddangos y rhyngweithiadau(define W1 (make-withdraw 100)) (W1 50) (define W2 (make-withdraw 100))Dangoswch fod y ddwy fersiwn o
make-withdrawyn creu gwrthrychau â'r un ymddygiad. Sut mae'r strwythurau amgylchedd yn wahanol rhwng y ddwy fersiwn?
3.2.4Diffiniadau Mewnol
Cyflwynodd Adran 1.1.8 y syniad y gall gweithdrefnau gael diffiniadau mewnol, gan arwain felly at strwythur bloc fel yn y weithdrefn ganlynol i gyfrifo gwreiddiau sgwâr:
(define (sqrt x)
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))Nawr gallwn ddefnyddio'r model amgylchedd i weld pam mae'r diffiniadau mewnol hyn yn ymddwyn fel y dymunir. Mae Ffigur 3.11 yn dangos y pwynt wrth werthuso'r mynegiad (sqrt 2) lle mae'r weithdrefn fewnol good-enough? wedi'i galw am y tro cyntaf ag guess yn hafal i 1.
Ffigur 3.11: Gweithdrefn Sqrt â diffiniadau mewnol.
Sylwch ar strwythur yr amgylchedd. Mae Sqrt yn symbol yn yr amgylchedd byd-eang sydd wedi'i rwymo i wrthrych gweithdrefn y mae ei amgylchedd cysylltiedig yn amgylchedd byd-eang. Pan alwyd sqrt, ffurfiwyd amgylchedd newydd E1, yn israddol i'r amgylchedd byd-eang, lle mae'r paramedr x wedi'i rwymo i 2. Yna gwerthuswyd corff sqrt yn E1. Gan mai mynegiad cyntaf corff sqrt yw
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))diffiniodd gwerthuso'r mynegiad hwn y weithdrefn good-enough? yn yr amgylchedd E1. Yn fwy manwl gywir, ychwanegwyd y symbol good-enough? at ffrâm gyntaf E1, wedi'i rwymo i wrthrych gweithdrefn y mae ei amgylchedd cysylltiedig yn E1. Yn yr un modd, diffiniwyd improve ac sqrt-iter yn weithdrefnau yn E1. Er mwyn bod yn gryno, dim ond y gwrthrych gweithdrefn ar gyfer good-enough? a ddangosir yn Ffigur 3.11.
Ar ôl diffinio'r gweithdrefnau lleol, gwerthuswyd y mynegiad (sqrt-iter 1.0), yn dal yn amgylchedd E1. Felly galwyd y gwrthrych gweithdrefn a rwymwyd i sqrt-iter yn E1 ag 1 yn arg. Creodd hyn amgylchedd E2 lle mae guess, paramedr sqrt-iter, wedi'i rwymo i 1. Galwodd Sqrt-iter yn ei thro good-enough? â gwerth guess (o E2) yn arg i good-enough?. Sefydlodd hyn amgylchedd arall, E3, lle mae guess (paramedr good-enough?) wedi'i rwymo i 1. Er bod gan sqrt-iter ac good-enough? ill dau baramedr o'r enw guess, dau newidyn lleol gwahanol yw'r rhain, mewn fframiau gwahanol. Hefyd, mae gan E2 ac E3 ill dau E1 yn amgylchedd amgylchynol iddynt, am fod gan y gweithdrefnau sqrt-iter ac good-enough? ill dwy E1 yn rhan amgylchedd iddynt. Un canlyniad i hyn yw y bydd y symbol x sy'n ymddangos yng nghorff good-enough? yn cyfeirio at rwymiad x sy'n ymddangos yn E1, sef gwerth x a ddefnyddiwyd wrth alw'r weithdrefn sqrt wreiddiol.
Felly mae'r model amgylchedd yn esbonio'r ddwy briodwedd allweddol sy'n gwneud diffinio gweithdrefnau lleol yn dechneg ddefnyddiol ar gyfer gwneud rhaglenni'n fodiwlaidd:
- Nid yw enwau'r gweithdrefnau lleol yn ymyrryd ag enwau y tu allan i'r weithdrefn amgylchynol, am y bydd enwau'r gweithdrefnau lleol wedi'u rhwymo yn y ffrâm y mae'r weithdrefn yn ei chreu pan redir hi, yn hytrach nag yn yr amgylchedd byd-eang.
- Gall y gweithdrefnau lleol gyrchu argiau'r weithdrefn amgylchynol, drwy ddefnyddio enwau paramedrau yn newidynnau rhydd yn unig. Y rheswm yw bod corff y weithdrefn leol yn cael ei werthuso mewn amgylchedd sy'n israddol i amgylchedd gwerthuso'r weithdrefn amgylchynol.
Ymarfer 3.11: Yn 3.2.3 gwelsom sut roedd y model amgylchedd yn disgrifio ymddygiad gweithdrefnau â chyflwr lleol. Nawr rydym wedi gweld sut mae diffiniadau mewnol yn gweithio. Mae gweithdrefn trosglwyddo negeseuon nodweddiadol yn cynnwys y ddwy agwedd hyn. Ystyriwch weithdrefn cyfrif banc 3.1.1:
(define (make-account balance) (define (withdraw amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds")) (define (deposit amount) (set! balance (+ balance amount)) balance) (define (dispatch m) (cond ((eq? m 'withdraw) withdraw) ((eq? m 'deposit) deposit) (else (error "Unknown request: MAKE-ACCOUNT" m)))) dispatch)Dangoswch y strwythur amgylchedd a gynhyrchir gan y dilyniant rhyngweithiadau
(define acc (make-account 50)) ((acc 'deposit) 40) 90 ((acc 'withdraw) 60) 30Ble cedwir cyflwr lleol
acc? Tybiwch ein bod yn diffinio cyfrif arall(define acc2 (make-account 100))Sut y cedwir cyflyrau lleol y ddau gyfrif ar wahân? Pa rannau o'r strwythur amgylchedd a rennir rhwng
accacacc2?
Troednodiadau
140 Mae aseiniad yn cyflwyno cynnildeb i gam 1 y rheol werthuso. Fel y dangosir yn Ymarfer 3.8, mae presenoldeb aseiniad yn ein galluogi i ysgrifennu mynegiadau a fydd yn cynhyrchu gwerthoedd gwahanol yn dibynnu ar y drefn y gwerthusir isfynegiadau cyfuniad ynddi. Felly, i fod yn fanwl gywir, dylem nodi trefn werthuso yng ngham 1 (e.e., o'r chwith i'r dde neu o'r dde i'r chwith). Fodd bynnag, dylid bob amser ystyried y drefn hon yn fanylyn y gweithrediad penodol o'r iaith, ac ni ddylid byth ysgrifennu rhaglenni sy'n dibynnu ar ryw drefn benodol. Er enghraifft, gallai crynhoydd soffistigedig optimeiddio rhaglen drwy amrywio'r drefn y gwerthusir isfynegiadau ynddi.
141 Os oes rhwymiad i'r newidyn eisoes yn y ffrâm bresennol, yna newidir y rhwymiad. Mae hyn yn gyfleus am ei fod yn caniatáu ailddiffinio symbolau; fodd bynnag, mae hefyd yn golygu y gellir defnyddio define i newid gwerthoedd, ac mae hyn yn codi materion aseiniad heb ddefnyddio set! yn benodol. Oherwydd hyn, mae'n well gan rai pobl i ailddiffiniadau o symbolau sydd eisoes yn bodoli arwyddo gwallau neu rybuddion.