0

let式を次のような継続渡しスタイルに変換する方法を知りたいです。

(let ([a (lambda (x) (+ 1 x))]) (a 4))

いくつか例を教えてください。ありがとうございます。

4

1 に答える 1

3

letまず、は次のようにマクロ展開されることに注意してください。

((lambda (a)
   (a 4))
 (lambda (x)
   (+ 1 x)))

それでは、上記をCPS変換してみましょう。次のようになります。

((lambda (a k)
   (a 4 k))
 (lambda (x k)
   (+ 1 x k))
 k)

最後の行は、元の使用kの続きです。let

それらすべてkがあまりにも紛らわしいように見える場合は、同じコードを次に示します。

((lambda (a k1)
   (a 4 k1))
 (lambda (x k2)
   (+ 1 x k2))
 k0)

ここで、k0は元の続きです。

どちらの場合も、+同様にCPS変換されて、加算の結果を...に渡すための継続を取ると思います。

于 2012-10-04T00:11:34.477 に答える