问题标签 [continuation-passing]

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

optimization - erlang 的性能工具

在编写像阶乘这样的函数时:

不禁会注意到尾调用优化并不是直截了当的,但是以连续解析的方式编写它是:

或者甚至可能被取消功能:

对这三个实现进行计时,我发现执行时间和预期的一样。

我的问题是,有没有办法获得比这更详细的知识?例如,我如何获得执行函数的内存使用情况——我是否完全避免了任何堆栈内存?

检查这些东西的标准工具是什么?

问题又是,我如何测量函数的堆栈高度,如何确定每个函数调用的内存使用情况,最后,哪一个最好?

0 投票
2 回答
157 浏览

scala - Scala 中围绕 shift 的异常处理

斯卡拉 2.10.2。跑步

如果我删除 try/catch 块,一切都很好。我仍在试图弄清楚 Scala 中的延续是如何工作的,但这完全让我难以理解。

0 投票
2 回答
366 浏览

scala - 如何在使用延续传递风格遍历树状结构时实现尾调用优化

我尝试使用中的连续传递样式实现尾调用优化以遍历树线结构。不幸的是,我以前使用的经验并没有多大帮助。我有没有尾优化的递归调用:

之后我尝试使用@annotation.tailrecand重写TailCalls,但仍然不确定如何装饰延续

提前致谢

ps:关于要点的完整示例

0 投票
1 回答
384 浏览

objective-c - Objective C 中的继续传递样式代码

我们可以在 Objective C 中编写延续传递风格的代码吗?如果是的话,你能举一些例子吗?

0 投票
0 回答
182 浏览

haskell - Order of function application

I am currently trying to figure out in which order Haskell tries to applicate certain functions. If I've got a function call like:

This is part of a bigger program executing a program where each code fragment could possibly alter the structure of the environment, which keeps track of the current variable assignment. In that case how can I be sure that haskell not accidentally executes the wrong part first? Im asking because if I do this exact line in continuation style, it would look like this:

If haskell executes the inner parts in the brackets first it could probably change the meaning of the progam because it messes up the order. I would really appreciate some help because I cant seem to figure this out by myself.

0 投票
1 回答
1736 浏览

clojure - 这个延续传递风格的 Clojure 函数生成器是如何工作的?

这是来自 Clojure 的喜悦,第 2 版。http://www.manning.com/fogus2/

然后做一个阶乘:

我的理解:

  • mm-cps 生成一个接收 n 的函数,即fn [n]
  • 内部的函数fn [nk]最初是用nkend调用的
  • 延续函数cont [v]被定义为(调用k并使用kontv的部分应用)作为第一个参数,n作为第二个参数。为什么要使用partial而不是简单地编写它(k (cont v n))
  • 如果accept?函数通过,则结束递归,适用k于 1。
  • 否则,以递减的 n 和延续函数recur递归回fn [nk] 。
  • 自始至终,kont没有改变。

我说得对吗,k直到决赛才真正执行(k 1)?所以,在被评估之前(fac 3)首先被扩展。(* 1 (* 2 3))

0 投票
1 回答
98 浏览

syntax - 方案符号:继续传递样式示例

一篇关于 CPS 的 Wikipedia 文章中,有以下代码片段,表面上来自 Scheme:

我找不到任何其他示例,或对“pyth&”、“*&”和“+&”用法的解释。许多谷歌搜索只发现还有其他形式,例如“=&”和“/&”。

0 投票
1 回答
176 浏览

haskell - 用延续重写代码

我有一些评估原始程序的代码。程序是一个语句列表(表达式、块、返回语句)。评估结果是最后评估的表达式。评估者也应该正确对待return陈述(即在第一次出现后停止评估return)。

为了实现这个逻辑,我传递了特殊的回调函数 ( NextStep),它在当前语句之后进行下一步评估。处理返回语句时我不调用下一步:

问题是如何用 continuation monad 重写这段代码?我想摆脱显式传递的NextStep回调evalStmtevalBlock函数。可能吗?

0 投票
2 回答
170 浏览

javascript - 继续传递 JavaScript

有人可以向我解释在 javascript 中继续传递的概念吗?我试图通过阅读此http://nathansjslessons.appspot.com/lesson?id=1090并尝试解决给出的练习来理解它,但我似乎无法解决它。

正确的做法是什么?

我试过这个:

0 投票
2 回答
202 浏览

haskell - Cont 的 monad 实例有什么用?

我正在玩 CPS,Control.Monad.Cont想知道我们通过注意到单子结构获得了什么。对于这样的代码:

可以很容易地改写为

不要误会我的意思,但除了能够使用do符号和newtype. 我也不认为这callCC取决于 monad 实例。

我缺乏想象力来举一个例子。Cont r声明一个 monad我们实际上得到了什么?