bod*_*ydo 14 lisp scheme continuations computer-science callcc
有谁知道是否call/cc可以用lambdas和闭包实现?
它似乎会call/cc中断程序的流程(就像异常一样),但lambdas和闭包不能这样做.因此我认为call/cc无法通过lambdas和闭包实现.
还有什么想法吗?
Ram*_*ren 12
问题并不是特别清楚,因为"只用lambdas和闭包实现"究竟是什么意思?
在任何情况下,continuation都可以在任何语言中使用闭包,方法是以连续传递方式手动编写.然后可以通过扩展编译器来实现自动转换为此形式,Lisps通常允许在用户级别通过宏.例如,请参阅cl-cont,这是一个实现Common Lisp的延续的库,它是一种没有内置它们的语言.
如Scheme中的高效普遍延续可能会在直接处理程序堆栈的较低级别上实现,但这不是一个要求,只是一个优化.
elj*_*nso 11
在Scheme中,您可以call/cc在转换为延续传递样式(CPS)时使用lambdas 实现.转换为CPS时,每次出现call/cc都可以替换为以下等价物:
(lambda (f k) (f (lambda (v k0) (k v)) k))
Run Code Online (Sandbox Code Playgroud)
其中k是要保存的延续,并且(lambda (v k0) (k v))是恢复此延续的转义过程(无论k0何时被调用,它都处于活动状态,将被丢弃).
所以,回答你对Scheme的问题:是的,可以做到.