Assignment 7: Continuations and Representation Independence
Show pagesource
Log In
empty-k
last-non-zero
(define last-non-zero (lambda (ls)
(let/cc k (letrec
((last-non-zero (lambda (ls)
(cond
;; fill in lines here ))))
(last-non-zero ls)))))
> (last-non-zero ‘(0))
()
> (last-non-zero ‘(1 2 3 0 4 5)) (4 5)
> (last-non-zero ‘(1 0 2 3 0 4 5)) (4 5)
> (last-non-zero ‘(1 2 3 4 5))
(1 2 3 4 5)
>
zero?
* lex
imperative
0k
lex
[`(,rator ,rand) `(app ,(lex rator acc) ,(lex rand acc))]
[`(zero? ,nexp) `(zero ,(lex nexp acc))]
[`(* ,nexp1 ,nexp2) `(mult ,(lex nexp1 acc) ,(lex nexp2 acc))]
letcc let/cc throw
letcc lex
00
imperative
(define value-of (lambda (expr env)
(match expr
[`(const ,expr) expr]
[`(mult ,x1 ,x2) (* (value-of x1 env) (value-of x2 env))] [`(sub1 ,x) (sub1 (value-of x env))]
[`(zero ,x) (zero? (value-of x env))]
[`(if ,test ,conseq ,alt) (if (value-of test env)
(value-of conseq env) (value-of alt env))]
[`(letcc ,body) (let/cc k
(value-of body (lambda (y) (if (zero? y) k (env (sub1 y))))))]
[`(throw ,k-exp ,v-exp) ((value-of k-exp env) (value-of v-exp env))] [`(let ,e ,body) (let ((a (value-of e env)))
(value-of body (lambda (y) (if (zero? y) a (env (sub1 y))))))]
[`(var ,y) (env y)]
[`(lambda ,body) (lambda (a) (value-of body (lambda (y) (if (zero? y) a (env (sub1 y))))))] [`(app ,rator ,rand) ((value-of rator env) (value-of rand env))])))
(define empty-env (lambda ()
(lambda (y)
(error ‘value-of “unbound identifier”))))
(define empty-k (lambda ()
.3 tnemngissa no 6 melborp fo reterpretni eht ekil ,egaugnal dexel a rof reterpretni na si sihT .woleb reterpretni eht htiw nigeb dluohs uoY
.spets suoiverp peek uoy taht si ti ,niagA .erutuf eht ni tniop emos ta meht ees ot ksa lliw eW .spets suoiverp eht fo hcae peek uoy taht si ti tuB .tkr.7a ti llac dna ,pets tsal eht gniniatnoc elfi a ni nruT .elfi etarapes a ni spets eseht fo hcae od dluohs uoY .segats lareves ni detelpmoc eb lliw tnemngissa eht fo trap sihT
.III trap ni lufesu .eno gnitseretni erom eht si
reterpretni ehT :III traP ruoy ekam lliw tub ,gnisserdda lacixel mrofrep yltcerroc ot deriuqer t’nera segnahc eerht tsrfi esehT
,eseht fO . dna ) fo mrof dexel a( tnemelpmi taht gniwollof eht htiw enil
ot senil ddA .4 ruoy ecalpeR .3 ruoy ecalpeR .2
.segnahc fo lufdnah a si rof gniksa er’ew lla neht ,gnikrow noisrev suoiverp eht tog ev’uoy fI .kcab si —ti fo tsal eht nees d’uoy thguoht uoy nehw tsuJ .1 xel :II traP
.noitinfied ruoy ni erehwemos noitaunitnoc taht gnisu eb ot gniog er’uoy dnA .ti ni eno naht erom htiw tsil a rof krow ot ti teg ,nehT .ti ni eno htiw tsil a rof krow ot ti teg ,nehT .ti ni s on htiw tsil a rof krow ot ti teg ,nehT .esac esab eht rof krow ot ti teg ,tsrfi :melborp siht no ecivdA
.tsil eht gnisrever eb uoy dluohs ron ,snoitarepo ekil-rebmem ot sllac yna niatnoc ton dluohs dna ,evisrucer yllarutan eb dluohs noitulos ruoY .selpmaxe rof elfi tset tneduts dna woleb sesac tset eht eeS .dehcaer si 0 tsrfi eht erofeb srebmun lla eb dluohs ti ,tsil eht fo thgir eht morf gnitrats nehw ,sdrow rehto nI .0 si rac esohw rdc tsal eht nruter dna srebmun fo tsil a sekat hcihw noitcnuf a , fo noitinfied gniwollof eht etelpmoC .1
gniwollof eht htiw enil
gniwollof eht htiw enil noitacilppa ruoy ecalpeR .1
. esu ro gnihtyna SPC *ton* dluohs uoy ,I trap roF cc/tel :I traP
stset-tneduts-7a :etius tset a edivorp osla eW tnemngissA
.yllacidohtem tnednepedni-noitatneserper snoitaunitnoc gnikam no seton dlo dna weN :lufpleh secruoser gniwollof eht dnfi yam uoy ,tnemngissa siht htiw deecorp uoy sA
etoN ?elyts gnissap-noitaunitnoc ni nettirw si esrevinu eht taht su gnillet er’uoy ,oS
(lambda (v) v)))
value-of
empty-env empty-k
value-of-cps empty-env empty-k
value-of-cps
times-cps-shortcut let/cc may not
apply-env apply-closure apply-k apply-env
extend-env
^ extend-env
empty-env
apply-env y k (else (env-cps y k))
(else (env-cps y k))
k^
let k^ error empty-env
make-closure apply-closure a
^
apply-k v
(else (k v))
k
Place your final version in a file named a7.rkt and submit it via Canvas.
(define-syntax cons$ (syntax-rules ()
((cons$ x y) (cons x (delay y)))))
(define car$ car)
(define cdr$
(lambda ($) (force (cdr $))))
(define inf-1s (cons$ 1 inf-1s))
take$
(define take$ (lambda (n $)
(cond
((zero? n) ‘()) (else (cons (car$ $)
(let ((n- (sub1 n))) (cond
cons car
cdr
> (take$ 5 inf-1s) (1 1 1 1 1)
> (take$ 10 inf-1s) (1 1 1 1 1 1 1 1 1 1)
car$ car
cons$
((zero? n-) ‘())
(else (take$ n- (cdr$ $))))))))))
streams
cons
force
match
apply-env
(else (k v))
apply-env
y k^ extend-env
apply-env
make-closure
make-closure
match
env-cps c-cps extend-env
apply-closure
extend-env
lex
.eulav emas eht teg ew ,esimorp taht ecrof ew emit yreve ,tuo no ereht morF .noitaulave eht ecrof neht nac hcihw fo ,esimorp a setaerc ti – esoht fo htob seod .yawa thgir ti gniod fo daetsni ,noitaulave taht gniod no ffo dloh ot ekil thgim ew dnA .eulav detupmoc ydaerla taht nruter tsuj retfaereht dna ,ecno ylno noisserpxe na etaulave ot ekil thgim ew hcihw ni semit era ereht ,nees ydaerla ev’ew sA . ni mrof eht dna ,mrof eht fo eton
ekat od tuB .ssecorp eht ni detaulave t’nsi ,yltnatropmI )) ( ( sa demrofsnart yllautca si edoc taht ,)
( mrof eht fo gnihtemos ees ew emit yreve – noitamrofsnart lautxet a gnimrofrep sa ti fo kniht nac uoY .rehtie ,ti ot hcum gnihton s’ereht tuB .ssalc ni ta dekool ev’ew noitinfied orcam tsrfi eht si .gnisserd-wodniw ycnaf htiw tsuj s’tahT . ot gnihton s’erehT ?gnikrow lla siht si woh oS
.)yaw eht yb ,maert$ rof sdnats $ eht( tsil a ni meht snruter dna ,maerts eht morf smeti n sllup taht
.nwod yaw eht lla s1 s’ti suht dnA .ti fo tnorf eht ni 1 a sah ti ,si gniht taht revetahw ,llew – rdc esohw dna tnorf ni 1 a sah taht tsil a gninfied er’eW .retfa er’ew tahw ylesicerp s’taht ,tcaf ni ,tuB .noitinfied ralucric a s’tahT .flesti fo smret ni maerts eht gnininfied er’eW .krow ylbissop t’nac taht ekil skool tI
.seno fo maerts etinfini na enfied ot gniog er’ew ,ereH .dedeen sa ,emit a ta meti eno :si rewsna elbanosaer ylno ehT ?tsil etinfini na dliub uoy od woh :si ksa ot noitseuq tsrfi ehT . dna , , dekaewt er’yeht taht hguone s’ti ,won roF .srepleh esoht ot kcab teg ll’eW
.tsil )deyaled demret osla( deziomem ,detaulave-ylizal a stI .smeti fo stsil etinfini ssecorp ot su selbane taht erutcurts-atad a , tuoba nrael ot teg ll’uoy ,keew siht resaetniarb eht roF
.llew sa tnemngissa eht fo II dna I strap edulcni ot erus ekaM
.snoitaunitnoc fo snoitatneserper noitcnuf redro-rehgih lla devomer ylreporp ev’uoy taht erusne ot enil eht evomeR .21 .orcam draobyek a htiw pets siht fo lla tsomla od nac uoy ,doog er’uoy fI .emit a ta eno noitamrofsnart hcae tset nac uoy ,hctam ruoy fo enil tsal eht sa
dda uoy fi ,rebmemeR .noitatneserper erutcurts atad tsil-deggat a htiw snoitaunitnoc fo snoitatneserper noitcnuf redro-rehgih ruoy ecalpeR .11 .) ,yllacipyt(
ot tnemugra dnoces eht sa retemarap lamrof emas eht sesu srepleh noitaunitnoc ruoy fo hcae ni noitcnuf renni eht taht erusne ,nehT .)noitutitsbus ahpla
na od ,si taht( seman elbairav degnahc eseht htiw dnopserroc ot ydob eht egnahc dna ,srepleh noitaunitnoc ruoy fo sretemarap lamrof eht fo hcae ot a ddA .01
.tnemecalper hcae retfa margorp ruoy tset nac uoy ,emit a ta eno srotcurtsnoc ruoy mrofsnart uoy fi ,rebmemeR .tuo edisni eht morf gnikrow redisnoc dluohs uoy ,snoitaunitnoc
detsen roF .srotcurtsnoc eseht ot sllac htiw snoitaunitnoc noitcnuf redro-rehgih ylticilpxe ruoy ecalper dna ,snoitaunitnoc ruoy rof srotcurtsnoc enfieD .9 . ni noitcnuf renni eht ot sretemarap lamrof eht sa emas eht era ) dna ( ot sretemarap
lamrof owt tsal eht taht gnirusne tsrfi redisnoC .noitatneserper erutcurts atad tsil-deggat a htiw serusolc fo noitatneserper noitcnuf redro-rehgih ruoy ecalpeR .8 . ot llac a htiw erusolc a fo noitatneserper redro-rehgih ylticilpxe ruoy ecalper dna enfieD .7
dna
.) dna yllacipyt ,ereh( ot tnemugra dnoces eht sa sretemarap lamrof emas eht esu htob ni snoitcnuf renni eht taht erusnE .)uoy dnim ,noitcnuf renni eht ton( fo sretemarap lamrof eht fo hcae ot
a ddA .4 enfieD .3
roivaheb eht ot ralimis si sihT .
gnisu syawla redisnoc thgim uoY .enil
ni ot llac eht ot ylppa ton oD .stnemnorivne dednetxe ruoy ot elbairav noitaunitnoc lanoitidda eht sa eht SPC uoy nehw gnidnib tel eht etanimile ot ”kcirt tel“ eht esU . ti llaC .reterpretni siht SPC .1
. ni noisserpxe ruoy fo enil tsal eht sa
.emit a ta eno noitamrofsnart hcae tset nac uoy ,noisserpxe ruoy fo enil tsal eht sa
eht evomer ,ti desu uoy fI .6 dda uoy
fi ,rebmemeR . dna ni snoitcnuf renni eht ot sretemarap lamrof eht sa emas eht era ) dna (
owt tsal eht taht gnirusne tsrfi redisnoC .noitatneserper erutcurts atad tsil-deggat a htiw stnemnorivne fo noitatneserper noitcnuf redro-rehgih ruoy ecalpeR .5
. ot sllac htiw stnemnorivne fo snoitatneserper redro-rehgih ylticilpxe ruoy fo 3 lla ecalper dna .stnemugra eerht ekat won
ruoy ,gniSPC retfa taht ecitoN .snoitcnuf esoht ot sllac eht lla dda dna , dna , ,
.ylevitcepser , dna ot meht gnimaner redisnoc dluohs uoy ,snoitcnuf sa detnemelpmi htob era stnemnorivne dna serusolc ruoy ecniS .eno txen eht ot no evom uoy erofeb yleritne pets siht hsinfi ot yrt tuB .emit a ta senil wef a reterpretni eht gniSPC dna ,sesualc hctam ruoy fo emos tuo tnemmoc redisnoc thgim uoY .reterpretni deSPC ruoy ni desu eb s’tekcaR .6 tnemngissA morf fo
dna
enfieD .2
dna esU . ni stluser eht dna ,reterpretni ruo fo egaugnal eht ot meht mrofsnart ot etirw uoy nehW .snoitamrofsnart ruoy nigeb uoy sa lufesu evorp lliw hcihw , dna fo snoitinfied eht sa llew sa ekat dluohs uoY
.gnitset nehw
ruoy esu ,tekcaR ni smargorp tset etirw nac uoY .reterpretni siht fo egaugnal eht ni yltcerid meht etirw ot ton referp ylbaborp lliw uoy ,smargorp tset nwo ruoy
.sloot wef a tnemelpmi ot deen tsrfi ll’ew ,dnuora yalp oT
erudecorp a dliub nac ew oS
resaetniarB
ot sretemarap lamrof
III traP rof spetS
> (define worlds-worst-random (delay (random 4)))
> (force worlds-worst-random) 2
> (force worlds-worst-random) 2
> (force worlds-worst-random) 2
inf-1s car cdr inf-1s car cdr
trib$
> (car$ trib$) 0
> (car$ (cdr$ trib$)) 1
> (take$ 7 trib$) (0 1 1 2 4 7 13)
cvm yb 25:90 21/20/0202 :defiidom tsaL · txt.7-tnemngissa
.reSPC ruoy esu ot dna llac ot woh su llet ot tnemngissa ruoy ni tnemmoc a ddA .)ti esu ot dna tset ot reisae ti ekam ylbaborp lliw siht( tnaw uoy fi smrof erom dda ro ,suluclac-adbmal eht no krow ot ti teg nac uoy ;smelborp ruo fo tsom naht dedne-nepo erom elttil a si sihT
.snoitacilppa taert yeht hcihw ni sesac cfiiceps ruof eht fo eton ekaT .noissucsid gnidnuorrus eht dna 442 egap no 2 erugiF yllacfiiceps 2%1perD3%per62%9721.49.1.1.01D3%iodF3%daolnwodF2%codweivF2%ude.usp.tsi.xreeseticF2%F2%A3%ptth=lru&DAjFQgDC0=dev&ajr=dac&4=dc&bew=ecruos&s=crse&=q&j=tcr&t=as ?lru/moc.elgoog.www//:ptth[ “noitamrofsnarT SPC ssaP-enO redrO-tsriF A” s’nesleiN dna yvnaD tlusnoc ot lufpleh ylgnideecxe ti dnfi yam uoY .noisserpxe taht fo noisrev deSPC a snruter dna noisserpxe na sekat taht erudecorp a etirW .snoitamrofsnart SPC smrofrep yllacitamotua taht margorp a etirw ot elbissop si ti ,ssalc ni denoitnem sA .smargorp SPC uoy hcihw yb ssecorp lacinahcem eht ot sa noitiutni gnorts ytterp a evah ylbaborp uoy ,won yB
. ti llaC .ecneuqes eht ni seulav suoiverp eerht eht fo mus eht hcae era retfaereht seulav eht dna ,driht eht si 1 ,dnoces eht si 1 ,rebmun iccanobirt tsrfi eht si 0 :maxe eht morf ecneuqes eht stI .maerts iccanobirt eht tnemelpmi ot si keew siht ksat ruoY .esnes sekam lla taht yllufepoH
.esimorp a si esohw dna 1 si esohw riap a ,si taht – tcaf ni si eulav sti taht dnfi ew ,esimorp taht gnitaulave ot dnuora teg yllanfi ew nehW .esimorp a si esohw dna 1 si esohw riap a eb ot enfied ew ,rehtegot lla ti tup ot ,oS
tresseD tsuJ