问题标签 [computation-expression]

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

f# - 部分延迟计算构建器

我正在尝试弄清楚如何使用计算构建器来表示一组延迟的嵌套步骤。

到目前为止,我有以下内容:

这会产生所需的结构:

我的问题是,在构建结构时,printfn需要调用。

理想情况下,我想要的是能够检索树结构,但能够调用一些返回的函数,然后执行内部块。

我意识到这意味着如果你有两个嵌套的步骤,它们之间有一些“正常”代码,它需要能够读取步骤声明,然后调用它(如果这有意义的话?)。

我知道这一点,Delay并且Run是用于计算表达式的延迟执行的东西,但我不确定它们在这里是否对我有帮助,因为不幸的是它们会评估所有内容。

我很可能遗漏了一些非常明显且非常“实用”的东西,但我似乎无法让它做我想做的事。


澄清

id用于演示,它们是拼图的一部分,我想象我可能如何呈现我想要的表达的“可调用”部分。

0 投票
1 回答
91 浏览

f# - 无法定义计算表达式自定义“条件”运算符

我很难condition在以下代码中提出定义。希望有一个例子和见解:

我认为b是隐含的( fun x, y -> booleanExpr(x, y) )。该术语booleanExpr(x, y)只是一些涉及xand的布尔表达式y

0 投票
4 回答
310 浏览

f# - 如何构建一个累积的构建器

我想为任一表达式构建一个计算表达式。这很简单

但是在失败(多个)的情况下,我想累积这些并返回一个失败,如下所示。

我对如何通过重写Bind并始终返回来做到这一点有一个想法Success(尽管有一些额外的结构表示累积的错误)。但是,如果我这样做,那么我会错过停止信号并且我总是会返回返回值(实际上并不是真的,因为我会遇到运行时异常,但原则上)

0 投票
0 回答
622 浏览

f# - 为什么 f# 自定义操作不允许进入控制流语句?

在任何控制流语句中使用 af# 计算表达式的自定义操作都会导致类型检查失败

为什么不允许这样做?不允许重写的自定义操作是什么:

像这样:

0 投票
1 回答
147 浏览

algorithm - 重构算法作为计算表达式?

这个问题包含对那些尚未完成Project Euler 问题 61 的人的剧透。我为这个必要的问题写了一个答案,所以我开始做一个更通用、更实用的答案。我成功了,但现在正试图弄清楚如何将其重构为或使用计算表达式,并且感到非常困惑。该问题在下面详细描述,但要点是您正在尝试建立一个数字链,当按顺序排列时,它会在所有相邻对中显示一个属性。每个链的候选者都来自不同的数字池,这意味着蛮力算法必须很聪明,以避免需要搜索所有可能的排列。

我对包含计算表达式的猜测是将搜索算法以某种方式变成一个单子,在那里它继续添加到解决方案中或将空列表转储出去。但我不完全确定。

0 投票
1 回答
115 浏览

f# - 嵌套工作流程中的产量问题

我正在尝试编写自己的 Either 构建器,作为我在 f# 中学习计算表达式的一部分,但我认为 Combine 方法存在问题,我遇到了困难。到目前为止我的代码:

使用此代码,我使用两个测试来测试组合:

正如我所料,第一个测试通过,但第二个测试失败并显示以下消息:

抛出异常:nunit.framework.dll 中的“NUnit.Framework.AssertionException”通过嵌套工作流测试/返回成功:失败:预期:<Success 5> 但是: <Failure>

我不明白。x没有产生,那么为什么它会影响我的父工​​作流程?如果我移动让!下面产量测试通过。我盯着我的 Combine 实现,它在我看来,对于Failure*Successpair,参数的实际顺序不会影响结果,但似乎确实如此

0 投票
2 回答
59 浏览

f# - 如何在没有 let 关键字的情况下在计算表达式上调用 bind?

说我有这个:

有没有办法bind即时“解包”(调用方法)地址和名称?有点像:

(如果 ! 是动态展开的运算符)。每次我想使用bind一次的结果时都必须声明一个新变量似乎有点冗长。

0 投票
3 回答
270 浏览

f# - 用计算表达式避免厄运金字塔?

我遇到了这个关于 F# 中“末日金字塔”的问题。那里接受的答案涉及使用活动模式,但是我的理解是它也可以使用计算表达式来解决。

如何使用计算表达式从此代码中删除“厄运金字塔”?

0 投票
2 回答
238 浏览

exception-handling - 如何在 F# 任务计算表达式中的每个步骤上实现非嵌套异常处理?

给定 F#task计算表达式,我可以编写:-

但我想做的是围绕两个函数调用进行非嵌套异常处理。getBlahAsync这可以在 C# 中通过async具有多个awaits 的方法很容易地完成。

如何在 F# 计算表达式中这样做?如果我以简单明了的方式尝试,accessToken从第一个try..with不会流入第二个try..with

(嵌套的问题是该// do stuff部分可能会增长一点,将外部推得with越来越远try。)

如何在 C# 中做到这一点:-

0 投票
1 回答
132 浏览

loops - 在下面的计算表达式中,for/while 不循环

我有以下计算表达式。问题是 For/While 不循环。

我不确定这是“合并”问题还是什么,我非常感谢您的帮助。Helper 函数在 MaybeBuilder 类型中定义:

例如,以下代码产生“j is 1”,就是这样。