Je veux savoir comment transformer une expression let à la poursuite en passant un style comme celui-ci:comment transformer let expression en cps?
(let ([a (lambda (x) (+ 1 x))]) (a 4))
S'il vous plaît me montrer quelques examples.Thanks.
Je veux savoir comment transformer une expression let à la poursuite en passant un style comme celui-ci:comment transformer let expression en cps?
(let ([a (lambda (x) (+ 1 x))]) (a 4))
S'il vous plaît me montrer quelques examples.Thanks.
D'abord, notez que la let
est macro-étendue à ce qui suit:
((lambda (a)
(a 4))
(lambda (x)
(+ 1 x)))
Donc, maintenant, nous allons CPS-transformons ci-dessus, et nous obtenons:
((lambda (a k)
(a 4 k))
(lambda (x k)
(+ 1 x k))
k)
où le k
sur la dernière ligne est la continuation de vos utilisations let
d'origine.
Si tous ces k
s regardent trop confus, voici le même code:
((lambda (a k1)
(a 4 k1))
(lambda (x k2)
(+ 1 x k2))
k0)
où le k0
est la continuation d'origine.
Dans les deux cas, je suppose que +
est CPS-transformé aussi à leur tour prendre une suite pour passer le résultat de l'addition de ....
Thanks.It aide vraiment. – user1657564