let式を次のような継続渡しスタイルに変換する方法を知りたいです。
(let ([a (lambda (x) (+ 1 x))]) (a 4))
いくつか例を教えてください。ありがとうございます。
let式を次のような継続渡しスタイルに変換する方法を知りたいです。
(let ([a (lambda (x) (+ 1 x))]) (a 4))
いくつか例を教えてください。ありがとうございます。
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変換されて、加算の結果を...に渡すための継続を取ると思います。