问题标签 [guard-clause]

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

f# - 在 F# 中匹配元组的不完整模式

我定义一个点

和一系列

我假设这个列表中的点是按时间排序的。

我正在尝试压缩两个时间序列,一般来说,它们会同时具有点,但其中任何一个都可能缺少一些点。

知道为什么我会在下面的代码中收到不完整模式匹配的警告吗?

如果我这样写,我不会收到任何警告,但它是尾递归的吗?

0 投票
2 回答
252 浏览

f# - 结合类型测试和文字的模式

此问题中的活动模式在升级到 VS 2012 RTM 后无法编译。它提供了一种进行类型测试并匹配单个模式中的文字的方法。例如:

这可以在没有活动模式的情况下完成吗?我意识到when可以使用警卫 ( :? string as s when s = "") 但它不能与其他模式结合使用。

0 投票
3 回答
1356 浏览

prolog - 序言中的保护条款?

它们存在吗?它们是如何实施的?

SWI-Prolog的协程谓词(freeze,whendif)具有警卫的功能。它们如何适应首选的 Prolog 编程风格?

我对逻辑编程非常陌生(使用 Prolog 和全部),并且对它不是纯粹的声明性这一事实感到有些困惑,即使在非常简单的情况下也需要程序考虑(请参阅有关使用\==ordif的这个问题)。我错过了什么重要的东西吗?

0 投票
3 回答
28670 浏览

haskell - Haskell中的多个where语句有什么办法吗

我试图在一个函数中编写 3-4 where 语句,但我得到错误并且无法做到,我试图做这样的事情:

我知道代码有点没用,但我写这个只是为了举例说明我的意思。

有没有人可以帮助我?提前致谢。

0 投票
1 回答
4355 浏览

f# - F# 使用“when”时,此表达式上的模式匹配不完整..为什么?

我有这个简单的 F# 函数:

但是,F# 编译器给了我“此表达式的不完整模式匹配”警告。在这种情况下,所有案例都应涵盖所有模式。

我还在 Chris Smith 编写的 Programming F# 第一版中的“模式匹配”部分看到了一个类似的示例。那么在 F# 的更高版本中可能会有所改变?

0 投票
1 回答
149 浏览

f# - when guard 是识别元组中的项目是否与模式匹配中的值相同的唯一方法吗?

考虑以下函数:

我想做的是替换| (alpha, red, green, blue) when red = blue && red = green && red <> 255uy ->| (alpha, value, value, value) when value <> 255uy ->. 如果我这样做,我会得到一个'value' is bound twice in this pattern错误。

有没有办法重写该行以简化满足编译器的防护?

0 投票
1 回答
526 浏览

c# - F# 从文件中读取和分离文本

例如,我有一个带有数字和逗号分隔行的 txt 文件。

4324,1dd3,444

4324,1fd3,444

4324,1as3,442

我有一个将字符串作为参数的函数,如果该字符串等于该行的第二个“单词”,我想检查每一行,所以在第一行中将是“1dd3”。如果该参数与我想将该行的第三个单词添加到字符串列表中的单词匹配(或以其他方式保存它以便稍后在代码中使用它)。

在 C# 中,我将简单地遍历列表并像这样在逗号上使用拆分

但我对 F# 相当陌生,在这里找不到正确的语法和/或方法,任何帮助将不胜感激。

0 投票
1 回答
556 浏览

f# - State Monad - While 循环

这个问题受到了这个问题的启发。我理解示例(ListBuilder),但我无法while为我的状态单子创建循环。我不清楚的是,随着迭代一个一个地跟随循环bind体。while

谢谢你。

0 投票
4 回答
1113 浏览

f# - F# 模式匹配直接针对 let 绑定

在 F# 中是否可以直接针对 let 绑定进行模式匹配?

例如,编译时没有任何警告:

而以下针对匹配和的行给出警告“此规则将永远不会被匹配”key2_

这是因为尽管它们是不可变的,但 let 绑定与 C#const变量不同?

0 投票
2 回答
360 浏览

f# - 简化嵌套模式匹配 F#

我正在用 F# 编写一个简单的表达式解析器,对于每个运算符,我只想支持一定数量的操作数(例如,两个用于 Modulo,三个用于 If)。这是我所拥有的:

我想摆脱或简化内部列表匹配。实现这一目标的最佳方法是什么?我应该使用多个警卫吗?