问题标签 [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.
optimization - erlang 的性能工具
在编写像阶乘这样的函数时:
不禁会注意到尾调用优化并不是直截了当的,但是以连续解析的方式编写它是:
或者甚至可能被取消功能:
对这三个实现进行计时,我发现执行时间和预期的一样。
我的问题是,有没有办法获得比这更详细的知识?例如,我如何获得执行函数的内存使用情况——我是否完全避免了任何堆栈内存?
检查这些东西的标准工具是什么?
问题又是,我如何测量函数的堆栈高度,如何确定每个函数调用的内存使用情况,最后,哪一个最好?
scala - Scala 中围绕 shift 的异常处理
斯卡拉 2.10.2。跑步
给
如果我删除 try/catch 块,一切都很好。我仍在试图弄清楚 Scala 中的延续是如何工作的,但这完全让我难以理解。
objective-c - Objective C 中的继续传递样式代码
我们可以在 Objective C 中编写延续传递风格的代码吗?如果是的话,你能举一些例子吗?
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.
clojure - 这个延续传递风格的 Clojure 函数生成器是如何工作的?
这是来自 Clojure 的喜悦,第 2 版。http://www.manning.com/fogus2/
然后做一个阶乘:
我的理解:
- mm-cps 生成一个接收 n 的函数,即fn [n]
- 内部的函数fn [nk]最初是用n和kend调用的
- 延续函数cont [v]被定义为(调用k并使用kont和v的部分应用)作为第一个参数,n作为第二个参数。为什么要使用
partial
而不是简单地编写它(k (cont v n))
? - 如果
accept?
函数通过,则结束递归,适用k
于 1。 - 否则,以递减的 n 和延续函数
recur
递归回fn [nk] 。 - 自始至终,kont没有改变。
我说得对吗,k
直到决赛才真正执行(k 1)
?所以,在被评估之前(fac 3)
首先被扩展。(* 1 (* 2 3))
syntax - 方案符号:继续传递样式示例
在一篇关于 CPS 的 Wikipedia 文章中,有以下代码片段,表面上来自 Scheme:
我找不到任何其他示例,或对“pyth&”、“*&”和“+&”用法的解释。许多谷歌搜索只发现还有其他形式,例如“=&”和“/&”。
haskell - 用延续重写代码
我有一些评估原始程序的代码。程序是一个语句列表(表达式、块、返回语句)。评估结果是最后评估的表达式。评估者也应该正确对待return
陈述(即在第一次出现后停止评估return
)。
为了实现这个逻辑,我传递了特殊的回调函数 ( NextStep
),它在当前语句之后进行下一步评估。处理返回语句时我不调用下一步:
问题是如何用 continuation monad 重写这段代码?我想摆脱显式传递的NextStep
回调evalStmt
和evalBlock
函数。可能吗?
javascript - 继续传递 JavaScript
有人可以向我解释在 javascript 中继续传递的概念吗?我试图通过阅读此http://nathansjslessons.appspot.com/lesson?id=1090并尝试解决给出的练习来理解它,但我似乎无法解决它。
正确的做法是什么?
我试过这个:
haskell - Cont 的 monad 实例有什么用?
我正在玩 CPS,Control.Monad.Cont
想知道我们通过注意到单子结构获得了什么。对于这样的代码:
可以很容易地改写为
不要误会我的意思,但除了能够使用do
符号和newtype
. 我也不认为这callCC
取决于 monad 实例。
我缺乏想象力来举一个例子。Cont r
声明一个 monad我们实际上得到了什么?