问题标签 [continuations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3358 浏览

scheme - Scheme 中的延续(call/cc)

我需要为即将到来的考试了解计划中的延续,而我根本不知道延续。谁能给我建议如何继续学习的资源?

问候,

小黑

0 投票
2 回答
648 浏览

scala - (尾)递归函数上的 CPS/Continuations StackOverflowError

有什么方法可以在 CPS 中使用尾递归函数而不抛出 StackOverflow?

导致以下 StackOverflowError:

有什么办法可以规避这个错误?蹦床?通过抛出异常来展开堆栈?谢谢!

0 投票
6 回答
4288 浏览

lua - 在 Lua 中调用/抄送 - 可能吗?

Wikipedia 关于Continuation的文章说:
“在任何支持闭包的语言中,都可以以连续传递风格编写程序并手动实现 call/cc。”

要么是真的,我需要知道如何去做,要么是不正确的,需要纠正这种说法。

如果这是真的,请告诉我如何在 Lua 中实现 call/cc,因为我看不到如何。如果 Lua 有 coroutine.clone 函数,

我想我可以手动实现 call/cc 。 如果闭包不足以实现 call/cc 那么还需要什么?

下面的文字是可选的阅读。
PS:Lua 的协程表有一次性延续。coroutine.clone 函数将允许我克隆它以多次调用它,从而有效地使 call/cc 成为可能(除非我误解了 call/cc)。然而,该克隆功能在 Lua 中不存在。Lua IRC 频道上有人建议我使用 Pluto 库(它实现序列化)来编组一个协程,复制它,然后解组它并再次使用它。虽然这可能可行,但我更感兴趣的是 call/cc 的理论实现,以及找到一种语言为了允许其手动实现而需要具备的实际最小功能集是什么。

编辑1:好的,大家帮帮我,这花了我很长时间,因为我不知道任何Scheme,但我想出了一些可以帮助我们的东西。请看下面的代码。第一个是 Scheme 中的程序,第二个是同一个程序,但在 Lua 中。
希望这会帮助我们。我相信我们非常接近。

PS:这些例子取自维基百科关于 CallCC 的文章的第一个例子。 方案版本



路亚版



我正在使用适用于 Windows 的 DrScheme 和 Lua - 对于任何想要帮助解决这些问题的人来说,这两个工具易于下载和安装,并且可以正常工作。

0 投票
1 回答
1258 浏览

scheme - 帮助动态风和呼叫/抄送

我在理解以下 Scheme 程序的行为时遇到了一些麻烦:

据我了解, c 将绑定到在“(显示'X)”之前创建的延续。

但是使用 c 似乎会修改自己!上面的定义打印(如我所料)IN、X 和 OUT:

这是一个程序:

现在,我希望当它再次被调用时,X 会被打印出来,但事实并非如此!

现在 c 不再是一个过程,并且第二次调用 c 将不起作用!

我期待对 (c) 的每次调用都会做同样的事情——打印 IN、X 和 OUT。我错过了什么?

0 投票
2 回答
338 浏览

haskell - Haskell CPS 编程风格问题

这是一个使用 CPS 样式将列表中的元素相乘的函数

如果我将表达式aux (0:xs) nk = k 0中的'k' 更改为 'nk'怎么办,这两者有什么区别?

0 投票
1 回答
408 浏览

c# - 使用 Mono.Tasklets.Continuation 崩溃

我正在尝试使用单声道在 C# 中处理微线程消息传递库。从 Mono 2.4 左右开始,“Mono.Tasklets”下显然可以使用延续(不是屈服)。但是,这些缺少我能找到的任何文档,虽然我对它们的一般使用有效,但我偶尔会遇到调试器无法附加的(但可重现的)崩溃。

我的具体问题是:

有谁知道 Mark() 函数是什么,以及我需要在哪里/何时调用它?这似乎是一次性初始化,但我不知道为什么那时不会在构造函数中。

使用多个延续有限制吗?我发现您不能将延续传递给另一个线程,但似乎我可以存储多个延续并来回切换?

0 投票
1 回答
656 浏览

scala - 使用“for”实现类 C# 的 Scala 实现

我正在尝试使用各种 Scala 实现的类似 C# 的 yield return (即这个)和 "for" -constructions,例如:

但是这段代码编译错误:

据我了解,我必须将所有代码都设置为类型() => Unit,而不是类型() => Unit @with-annotations。我怎样才能做到这一点?

这个问题似乎很常见,但是我在网上没有找到任何提及。

0 投票
4 回答
2115 浏览

c# - 序列化和 Yield 声明

是否可以序列化包含yield语句的方法(或包含此类方法的类),以便在重新水化类时,保留生成的迭代器的内部状态?

0 投票
5 回答
10435 浏览

haskell - Haskell Cont monad 如何以及为什么工作?

这就是 Cont monad 的定义方式:

你能解释一下它是如何以及为什么起作用的吗?它在做什么?

0 投票
1 回答
1274 浏览

scala - 为隐式 Monad 使用 Scala 的定界延续

我正在玩某种由单子接口定义的 DSL。

由于使用一堆 flatMap 应用程序来应用 monad 有点麻烦,而且我发现在语法上理解起来并不那么漂亮,所以我试图使用定界延续来隐式地混合 monadic 和非 monadic 代码。

它实际上工作正常,但我对这些类型真的不满意,因为我必须将自己限制在可编译的“Any”类型:(。因此当结果是稍后使用“Any”和“casting”时需要可能会导致运行时错误...

这是一些将 Scala 中的 Option-Monad 与常规代码混合的示例代码,因此您可以看到我在说什么:

编译代码: $ scalac -P:continuations:enable BO.scala

并在 scala REPL 中进行测试:

Option-Monad 使用runOption函数运行(参见测试函数)。在runOption中调用的函数中调用的函数可以使用get函数或value方法从Option中获取值。如果值为None,Monad 将立即停止并返回None。因此不再需要对Option类型的值进行模式匹配。

问题是,我必须在runOption中使用“Any”类型并在get中使用延续的类型。

是否可以在 scala中表达runOption并使用 rank-n 类型?所以我可以写:

谢谢!