Functional programming 是否可以检查当前延续是否终止?
是否可以定义程序Functional programming 是否可以检查当前延续是否终止?,functional-programming,scheme,continuations,delimited-continuations,Functional Programming,Scheme,Continuations,Delimited Continuations,是否可以定义程序f,以便在退出前打印退出…,否则打印尚未完成… 比如, (display "hello, world\n") (f) 应该给 hello, world Exiting... Not done yet... bye, world 当 应该给 hello, world Exiting... Not done yet... bye, world 我曾考虑过使用控制操作符,如shift/reset,但没有成功。关键的困难似乎是无法判断当前的延续是否终止。有什么想法吗?续篇永远不
f
,以便在退出前打印退出…
,否则打印尚未完成…
比如,
(display "hello, world\n")
(f)
应该给
hello, world
Exiting...
Not done yet...
bye, world
当
应该给
hello, world
Exiting...
Not done yet...
bye, world
我曾考虑过使用控制操作符,如
shift
/reset
,但没有成功。关键的困难似乎是无法判断当前的延续是否终止。有什么想法吗?续篇永远不会是空的。结束后发生的事情是特定于实现的,但总是存在某种资源释放和关闭
想象一下,您拥有我寄予厚望的以下代码:
(call/cc (lambda (end)
(define (f)
(call/cc (lambda (c)
(if (eq? c end)
(display "bye, world\n")
(display "Not done yet...")))))
(f)
(display "hello, world\n")
(f)))
现在,您不能保证可以比较延续
c
和end
,即使它们是相同的延续。这与语言细节有关,在R6RS
之前,没有办法比较两个过程,我们也没有真正比较过程,因此实现可能已经打开了它们的halt
延续代码,这样它就被包装在一个lambda中,因此您实际上是在比较(eq?(lambda(v)(halt))(lambda(v)(halt))
并且它不保证是#t
或#f
谢谢调查!我编辑了这个问题,将术语改为“终止继续”。此外,我在不同的方案(麻省理工学院、勒克特、吉勒、比格罗、奇比、鸡肉)上尝试了该代码但它们都会打印一些类似于尚未完成…您好,世界尚未完成…
。