有谁知道,如果call/cc可以只用lambda表达式和封锁来实现?

似乎call/cc中断该程序的流动(如一个例外),但lambdas和封闭件不能做到这一点。因此,我认为call/cc不能通过lambdas和封闭件来实现。

任何更多的想法?

有帮助吗?

解决方案

现在的问题是不是特别清楚,因为究竟是什么意思?

“只有lambda表达式和封锁实现”

在任何情况下,延续可在任何语言在延续手动编写传递风格。然后自动翻译成这种形式可以通过扩展编译器,它的Lisp通常允许通过宏用户级别来实现。例如参见 CL-CONT ,实施延续了Common Lisp的,这是一个图书馆在没有他们的语言内置的。

高效普遍延续像在方案很可能被上一个较低的水平直接与程序栈处理来实现,但是这不是必须的,只是一个优化。

其他提示

在方案可以转换为延续传递风格(CPS)时使用的lambda实现call/cc。当转换为CPS,call/cc的每次出现可以用下面的等价物来替换:

(lambda (f k) (f (lambda (v k0) (k v)) k))

其中k是要保存的延续,(lambda (v k0) (k v))是还原此延续逃生过程(无论延续k0即活性,当它被调用时,将被丢弃)。

因此,要回答你的问题的方案:是的,这是可以做到

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top