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

如果所有这些ks 看起来太混乱,这里是相同的代码:

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

其中k0是原始的延续。

在这两种情况下,我都假设它+也经过类似的 CPS 转换,以继续将加法的结果传递给....

于 2012-10-04T00:11:34.477 回答