问题标签 [continuation]
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.
scheme - 使用方案的延续
所以我认为我了解延续在 Scheme 中的基本工作原理,但我无法弄清楚如何使用它而不是递归。
我们得到了 make-matcher 的工作代码(只是基本的模式匹配),它已经完成了我们想要的一切。您给它一个模式,它会为您创建一个匹配器,您可以使用它在片段中搜索该模式。匹配器接受一个接受器,将它的结果提供给它,如果结果不被接受,它会递归地下降到片段的下一部分并继续前进。
现在,我们要做的基本上就是修改它以使用延续而不是接受器。它返回后缀(从不匹配的模式中留下的东西)和一个延续,所以像
会给我们后缀和函数回溯,我们可以调用以继续前进。
所以供参考,原始代码
因此,让我们以 or-matcher 为例。目前,如果它找到匹配项,它会将结果提供给接受者,如果接受者不喜欢这个结果,它会继续寻找下一个可能的答案。如果我想使用延续,我将不得不在它找到结果后强制它退出并使用 call/cc 来存储程序的当前状态。我只是……不完全确定我应该把逃生和呼叫/抄送放在哪里。我想我现在需要添加一个基本案例,因为我没有接受者告诉我我的答案是对还是错,但是......
我想如果有人只是给我一些关于要进行的主要更改的指示,我可能会弄清楚。我当时了解 WHAT 的各个部分,但无法完全了解如何实现它。
php - PHP 嵌套循环回显不能换行
这是我的代码段:
但是,它不起作用。我希望循环内的两个 echo 语句继续,而不是换行。我该如何解决?
c# - 在延续链中传播异常的正确方法是什么?
在延续链中传播异常的正确方法是什么?
azure - Windows Azure 存储表中的事务和延续令牌
在 Azure 存储表中检索 1200 个实体时触发了多少事务,并牢记延续令牌。
我已经读到“Windows Azure Tables 在单个请求中最多返回 1000 个实体,并在有更多结果(剩余 200 个实体)可用时返回一个继续令牌。” 请参阅(http://blog.smarx.com/posts/windows-azure-tables-expect-continuation-tokens-seriously)。
因为 Azure 是根据编号收费的。我们通过云执行的交易;我只想知道:在第 1000 个实体(行)结果之后返回 1200 个实体(行)和一个延续令牌的单个请求将执行多少个事务?
java - Jetty - 检测断开连接的客户端(续)
我正在使用带有 Continuations 的 Jetty 来实现长轮询,但我看不到检测客户端断开连接的方法。
我知道在第一次运行(创建延续)和任何后续运行之间的时间里,由于 HTTP 的性质,客户端和服务器之间可能没有流量,但我可以解决只是能够检测到客户端正在尝试发回消息时断开连接(服务器调用继续)。
我一直在试图找到一种方法来检测作者实际上并没有写信给客户,但我似乎找不到。
scala - 如何在maven中使用akka数据流
我在使用数据流时遇到了问题。如果我在 maven scala 插件配置中启用延续,maven 无法编译。
在我启用 maven 中的延续后,编译开始失败。并且错误信息非常混乱。
像这样:
发现:单位@scala.util.continuations.cpsSynth @util.continuations.cps[scala.concurrent.Future[Any]]
要求:单位
或这个:
找到 : ((Class[_ <: Indexed[String]], scala.concurrent.Promise[List[_ <: Indexed[String]]])) => (Class[ $1(in value $anonfun)], List[ <: Indexed[String]]) @scala.util.continuations.cpsSynth @util.continuations.cps[scala.concurrent.Future[Any]] forSome { type _$1(in value $anonfun) <: Indexed[String] }
必需: ((Class[_ <: Indexed[String]], scala.concurrent.Promise[List[_ <: Indexed[String]]])) => B
所有这些错误都发生在关闭时。似乎闭包不能在流上下文中使用。
有谁知道为什么?
错误代码:
functional-programming - 方案延续异常行为
这是我的代码。当我调用 continuation 两次时,我希望"world"
显示两次。但它只输出一次。我错过了什么?
f# - Delay 如何在 continuation monad 中准确地工作以防止 stackoverflow?
这是一个参考问题:StackOverflow in continuation monad
,我和他玩了一点,需要一些澄清。
1)我想这是:
使计算工作流中的行为在这些之间产生如 toyvo 所示的差异:
所以我不完全明白什么是诀窍,什么时候
(fun c -> map xs c)
只是不同的符号(map xs)
2)推理问题。- 在 OP 的第二个地图示例中,我发现它由于v
值的推断问题而无法编译,因为它推断f
为a -> b list
,而不是所需的a -> b
。为什么它以这种方式推断?万一let v = f x
它会很好地推断出来。
3)在我看来,VS 在工具提示中显示了不准确的类型签名:monad 的 Return 的返回类型为:('e->'f)->f
,而 Bind 的返回类型仅为'c->'b
。- 似乎它('e->'f)
仅c
在 Bind 情况下简化,或者我在这里遗漏了什么?
谢谢你的澄清,
托马斯
编辑 - 测试转储:
map_fixed:
地图 [1; 2]地图[2]地图[]cBind[]地图[]cBind[3]地图[2]地图[]cBind[]地图[][2; 3]
地图:
地图[1;2]地图[2]地图[]cBind[]cBind[3][2; 3]
编辑问题2:
haskell - 让 IO 成为 MonadCont 的实例有意义吗?
显然MonadCont
s 比普通Monad
的 s 更受限制并且提供更多的权力,这要归功于它的callCC
. 这意味着它的实例更少,你可以用它做更多的事情。
查看 的已定义实例时MonadCont
,看起来那里列出的所有内容都需要一个Cont
或ContT
一个已经存在的MonadCont
实例。这意味着我们必须从一些开始,Cont
或者ContT
特别是不能IO
变成MonadCont
.
callCC
但是,我认为在上下文中使用是有意义的IO
,因此我们可以简化以下内容(根据官方 Hackage 页面 callCC
示例进行调整):
进入
以callCC
更清洁的方式在 do 块中使用。
当然,要创建IO
一个实例,MonadCont
我们必须有一些魔法,因为callCC
for 的IO
意思是“调用给定的函数,未来的计算指定现实世界中接下来会发生什么”,所以只有解释器或编译器才能真正知道这意味着什么. 另一方面,我没有看到任何理论上的理由表明这是可导入的,因为 Scheme 已经拥有它很长时间了,并且制作这样一个实例根本不需要更改语言。
可能的问题
我能想到的一个因素是 的语义callCC
与适当的清理保证相冲突。许多语言都提供了“try...finally”控制以进行适当的清理,C++ 的析构函数也保证了这一点。我不确定 Haskell 中它是什么,但如果callCC
可以IO
使用它来逃避任何IO
需要清理的相关上下文,因此提供 sush 保证将变得不可能,正如您可以看到Ruby 中发生的那样。
意见讨论
@jozefg 的回答非常好。我只想在这里写下我的看法。
确实
MonadCont
来自mtl。但这并不意味着 GHC 或其他编译器不能定义 aunsafeCallCC
并定义实例,如果MonadCont
正确的定义在编译模块的范围内-XIOMonadCont
并被设置。我已经谈到了异常安全,看起来很难确定这一点。但是,Haskell 已经有了,在我看来
unsafePerformIO
,这基本上比 更不安全。unsafeCallCC
在大多数情况下,原因
callCC
是过于强大,应尽可能避免。但是,在我看来,延续传递风格可以用来使惰性求值显式化,这有助于更好地理解程序,从而更容易找到可能的优化。当然 CPS 不是MonadCont
,但使用它并将深层嵌套的内部函数转换为 do 表示法是一个自然的步骤。
java - Jetty、DefaultServlet、BlockingCallback 和 TimeoutException 问题
我正在运行一个由 Jetty 9.1.0.RC1(独立发行版)提供支持的在线应用程序。
我的日志文件被提供静态内容(.js、.css、.png 文件等)时随机发生的以下问题填满:
这同样适用于以下资源:
我正在使用 servlet 3.0。有两个 DefaultServlet 的实例,一个来自 webdefault.xml,另一个来自 web.xml,用于提供用户图像(不与 .war 文件捆绑)。
前者 DefaultServlet 的配置没有修改,后者如下:
我花了过去 3 天的时间试图弄清楚这件事,但仍然被卡住了。我没有在应用程序的任何地方显式使用延续。
该问题仅在码头(重新)启动后几天出现。
任何线索在哪里寻找答案?似乎我已经用尽了所有可能的选择。
亲切的问候,
迈克尔·齐斯科夫斯基