Scheme 如何将let表达式转换为cps?

Scheme 如何将let表达式转换为cps?,scheme,continuation-passing,Scheme,Continuation Passing,我想知道如何将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使

我想知道如何将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
s看起来太混乱,那么以下是相同的代码:

((lambda (a k1)
   (a 4 k1))
 (lambda (x k2)
   (+ 1 x k2))
 k0)
其中
k0
是原始的延续


在这两种情况下,我假设
+
也被类似地转换为CPS,以继续传递加法的结果到….

首先,请注意
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
s看起来太混乱,那么以下是相同的代码:

((lambda (a k1)
   (a 4 k1))
 (lambda (x k2)
   (+ 1 x k2))
 k0)
其中
k0
是原始的延续

在这两种情况下,我假设
+
也被类似地转换为CPS,以继续将加法的结果传递给