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

谢谢调查!我编辑了这个问题,将术语改为“终止继续”。此外,我在不同的方案(麻省理工学院、勒克特、吉勒、比格罗、奇比、鸡肉)上尝试了该代码但它们都会打印一些类似于
尚未完成…您好,世界尚未完成…