问题标签 [callcc]

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 投票
9 回答
3063 浏览

functional-programming - 我只是没有继续!

它们是什么,它们有什么用?

我没有 CS 学位,我的背景是 VB6 -> ASP -> ASP.NET/C#。任何人都可以用清晰简洁的方式解释它吗?

0 投票
1 回答
938 浏览

smalltalk - 使用 Seaside 延续

如何在 Squeak 中获得 BlockClosure(我想使用 BlockClosure>>callCC)?

当我写 [#foo] 是一个 BlockContext 时,有什么关系?

更新:我发现 BlockClosure 主要是新编译器的东西。

相反,我如何使用 seaside Continuations?我遇到了问题,任何例子都将不胜感激。

进一步更新:这样做的目的不是使用 seaside(至少不是直接使用),而是以一种比滚动我自己的状态跟踪迭代器更容易的方式编写遍历和其他类似的东西。

0 投票
7 回答
3100 浏览

java - Java:使用 RuntimeException 从访客中逃脱

我非常想在 Java 程序中使用未经检查的异常作为短路控制流结构。我希望这里有人可以建议我以更好,更清洁的方式来处理这个问题。

这个想法是我想缩短访问者对子树的递归探索,而不必在每个方法调用中检查“停止”标志。具体来说,我正在使用抽象语法树上的访问者构建控制流图。AST 中的一条return语句应该停止对子树的探索,并将访问者发送回最近的封闭 if/then 或循环块。

Visitor类(来自XTC 库)定义

通过形式的反射方法回调

dispatch没有声明抛出任何异常,所以我声明了一个扩展的私有类RuntimeException

现在,return 语句的访问者方法看起来像

每个复合语句都需要处理ReturnException

这一切都很好,除了:

  1. 我可能会忘记在ReturnException某个地方捕获,编译器不会警告我。
  2. 我觉得脏。

有一个更好的方法吗?是否有一种我不知道的 Java 模式来实现这种非本地控制流?

[更新] 这个特定的例子有些无效:Visitor超类捕获并包装异常(甚至RuntimeExceptions),所以抛出异常并没有真正的帮助。我已经实施了enumvisitReturnStatement. 幸运的是,这只需要在少数地方进行检查(例如,visitCompoundStatement),因此它实际上比抛出异常要少一些麻烦。

总的来说,我认为这仍然是一个有效的问题。虽然也许,如果您不依赖于第三方库,则可以通过明智的设计避免整个问题。

0 投票
10 回答
16161 浏览

lambda - 什么是通话/抄送?

我已经尝试过几次来掌握延续call/cc的概念。每一次尝试都是失败的。有人可以向我解释这些概念吗,最好用比维基百科或其他 SO 帖子中更现实的例子。

我有网络编程和 OOP 的背景。我也了解 6502 程序集,并与 Erlang 有过一次小小的交流。但是,我仍然无法理解 call/cc。

0 投票
4 回答
1937 浏览

scheme - 通话/抄送的细节

这与什么是呼叫/抄送有关?,但我不想为了自己的目的劫持这个问题,并且它的一些论点(例如与 setjmp/longjmp 的类比)回避了我。

我想我对什么是延续有足够的了解,我认为它是当前调用堆栈的快照。我不想讨论为什么这可能很有趣,或者你可以用延续做什么。我的问题更具体地说,为什么我必须为 call/cc 提供函数参数?为什么 call/cc 不只返回当前的延续,所以我可以用它做任何我想做的事情(存储它,调用它,你命名它)?在另一个问题的链接(http://community.schemewiki.org/?call-with-current-continuation-for-C-programmers)中,它谈到“本质上这只是一种让您继续的干净方式并避开后续跳回保存点的方式。”,但我不明白。这似乎是不必要的复杂。

0 投票
1 回答
1033 浏览

go - 可以在 Go 中进行 call-cc 吗?

是否可以在 Google 的新 Language Go中进行Call-with-current-continuation

0 投票
6 回答
5938 浏览

scheme - 阴阳之谜如何运作?

我试图在 Scheme 中掌握 call/cc 的语义,Wikipedia page on continuations 以阴阳谜题为例:

它应该输出@*@**@***@****@...,但我不明白为什么;我希望它输出@*@*********...

有人可以详细解释为什么阴阳之谜会如此运作吗?

0 投票
2 回答
3358 浏览

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

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

问候,

小黑

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 回答
326 浏览

functional-programming - 这个 callcc 示例是如何工作的?

(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3

这些中的每一个都评估什么以及为什么?