continuation-passing相关内容

如何为延续 monad 实现堆栈安全的 chainRec 运算符?

我目前正在试验延续 monad.Cont 实际上在 Javascript 中很有用,因为它从回调模式中抽象出来. 当我们处理一元递归时,总会有堆栈溢出的风险,因为递归调用不在尾部位置: const chain = g =>f=>k=>g(x => f(x) (k));= x => 的常量k=>k(x);const id = x =>X;const inc = x =>x + 1;con ..

如何让蹦床适应连续传球风格?

这是一个右折叠的简单实现: const foldr = f =>acc =>([x, ...xs]) =>x === 未定义?ACC: f(x) (foldkr(f) (acc) (xs)); 这是非尾递归,因此我们不能应用蹦床.一种方法是使算法迭代并使用堆栈来模拟函数调用堆栈. 另一种方法是将递归转换为 CPS: const Cont = k =>({runCont: k});con ..

方案中的连续传递风格?

我在维基百科上遇到了这段代码: (define (pyth x y k)(* x x (拉姆达 (x2)(* y y (λ (y2)(+ x2 y2 (λ (x2py2)(sqrt x2py2 k))))))))) 文章说那段代码是另一段代码的Continuation-Passing版本: (定义(pyth x y)(sqrt (+ (* x x) (* y y)))) 然而,我很困惑:这 ..
发布时间:2021-07-16 19:44:32 其他开发

将函数更改为 CPS 样式

我们被要求编写一个程序,当给定一个列表时,它将替换给定元素的第一次出现,并且只替换第一个,但问题是用 CPS 风格编写.我们无法将其转换为 CPS 风格的书面程序,该程序给出了成功连续和失败连续.. 如果有人愿意尝试,我们将不胜感激:] 我们拥有的程序(由 此处的答案慷慨提供): (define (replace-one list old new)(条件((对?列表)(让 ((nex ..
发布时间:2021-07-02 18:51:24 其他开发

ocaml 中的连续传球风格

我对这个概念有点困惑.所以我有以下功能 let rec sumlist lst =与 lst 匹配|[] ->0|(h::t) ->h + (sumlist t) 有延续,可以写成 let rec cont_sumlist lst c =与 lst 匹配|[] ->(c 0)|(h::t) ->cont_sumlist t (乐趣 x -> c (h + x)) 我仍然对 c 的含义和它 ..
发布时间:2021-06-12 18:33:31 其他开发

为什么继续操作可以避免stackoverflow?

我一直在尝试理解延续性/CPS,从我的收集中可以得出延迟的计算结果,一旦我们到达列表的末尾,便调用了最终的计算结果. 我不明白的是,为什么CPS阻止了stackoverflow的出现,就像按照示例1中的幼稚方法构建嵌套函数一样.抱歉,冗长的帖子却试图展示这个想法(以及可能的发展方向)错误): 所以: let list1 = [1;2;3] 示例1:“幼稚的方法" let ..
发布时间:2020-11-03 00:08:32 其他开发

尝试使用延续传递样式以通过minimax算法避免堆栈溢出

我的目标摘要:弄清楚如何使用连续传递样式来避免使用算法时的堆栈溢出,我认为这种算法无法进行尾递归.或者,找到一种使函数尾部递归的方法. 详细信息: 我是F#(通常是函数式编程)的新手,我正尝试通过alpha-beta修剪实现minimax算法.这是一种算法,用于确定两人游戏的最佳移动方式.可以在以下位置找到该算法的伪代码: https://en.wikipedia. org/wiki/Alp ..

延续传递风格似乎对Clojure没什么影响

我一直在尝试连续传递样式,因为我可能需要尽快处理一些非尾递归函数。无论如何,要知道的好技术!我在Lua和Clojure中都编写了一个测试函数;在我的小型Android掌上电脑上运行Lua。 Lua版本似乎运行良好,Lua的堆栈深度已经达到300000,但是使用CPS,我当时很容易能够在系统崩溃之前进行超过7000000次迭代,这可能是由于内存不足,而不是CPS / Lua组合没有任何限制。 ..
发布时间:2020-10-02 22:01:18 其他开发

记住延续传递样式功能

我想知道是否有一种方法可以实现能够处理cps样式函数的通用"memoize"函数(例如,以函数作为输入的函数以及作为输出的函数,例如python的装饰器). /p> 对于普通函数(如“返回结果值,参数仅用于输入!"),备忘录功能可以像在javascript中一样简单 function memoize(fun) { var cache = {}; return functio ..
发布时间:2020-05-08 18:52:56 前端开发