我想知道如何将 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
s 看起来太混乱,这里是相同的代码:
((lambda (a k1)
(a 4 k1))
(lambda (x k2)
(+ 1 x k2))
k0)
其中k0
是原始的延续。
在这两种情况下,我都假设它+
也经过类似的 CPS 转换,以继续将加法的结果传递给....