问题标签 [pattern-guards]

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 投票
1 回答
232 浏览

haskell - Haskell 中的模糊模式匹配调度

我正在在一棵树上编写一些解析代码。(即斯坦福 nlp 依赖树)

基本上我有这样的功能:

如果节点有一条nsubj和一条dobj边从它出来,我想要的是分派到第一条规则。我不在乎它可能还有什么。

显然,我的示例函数没有这样做,因为它要求边缘以正确的顺序出现,并且如果存在更多边缘,它将不匹配。

一种方法是使用警卫来提高表现力,我可以这样做:

但这要画得多,我什至不了解目标节点。

有没有一种标准方法可以在像我这样的图上编写模式匹配解析器?或者是否有一些基于 Maybe monad 的魔法..?

0 投票
2 回答
12887 浏览

if-statement - less.css 如果变量是真正的守卫

我想知道是否有更好的解决方案(或者我的解决方案是否正确)来创建带有变量和守卫的 if 语句。

目标:

  • 如果变量设置为 true,则编译代码(有效)
  • 如果变量设置为其他任何值,请忽略代码(默认,有效)
  • 保持初始代码位置(dosnt 工作,在任何地方被合并.responsive (@responsive);

我的代码:

0 投票
1 回答
106 浏览

haskell - Haskell 中的警卫、模式匹配和不同的方程

回到我的动物示例:

我将如何执行不同的方程式?假设 p1 p2 p3 输入为“Bert”“Donald”“Horace”,我希望它执行一个特定的方程,但如果它们输入为“Bert”“Donald”“Sheila”,我希望它执行一个不同的方程方程?

0 投票
2 回答
148 浏览

haskell - 如何指定我希望某些内容出现在 Haskell 中

我有一个警卫,条件是查找 x 列表 == 某些东西,即 x 在列表中。我试过了:

但是在加载函数时出现“表达式上下文中的模式语法”错误?

0 投票
2 回答
1316 浏览

erlang - `when`上的Erlang多个警卫

各位 stackoverflow 人,

我目前正在学习 Erlang。有人能指点我为什么我会得到illegal guard expression这个后卫吗?

add_new_prime(Idx, Primes, Ref) when length(Primes) =:= 0 ; math:sqrt(Idx) < hd(Primes) -> Ref ++ [Idx];

如果我只做“不优化”它add_new_prime(Idx, Primes, Ref) when length(Primes) =:= 0 -> Ref ++ [Idx];

有用。我见过多个示例,其中每个子句有多个“声明”,但看不出为什么我的不工作。

非常感谢!

0 投票
1 回答
405 浏览

function - Haskell——用Guards定义函数

我对 Haskell 相当陌生,目前正在从事模拟检查器的任务。我在确定有条件地检查表达式和更新元组值的正确方法时遇到了一些困难。我有一个名为 getPos 的函数,它将返回板上特定位置的 Char 以确定其状态。

使用函数在 where 子句中定义变量是否正确?我在最后一行收到以下错误:

0 投票
2 回答
1107 浏览

haskell - 在模式保护或案例表达式中重用模式

我的 Haskell 项目包括一个表达式评估器,就这个问题而言,它可以简化为:

实现这一点的直接方法是编写一个case表达式来递归评估和模式匹配,如下所示:

对我来说,这个定义看起来有点尴尬,所以我使用模式保护重写了定义,如下所示:

我认为这个定义与表达式相比看起来更清晰case,但是当为不同的构造函数定义多个模式时,模式会重复多次。

注意到这些重复的模式,我希望有一些语法或结构可以减少模式匹配中的重复。是否有一种普遍接受的方法来简化这些定义?

编辑:在查看了模式守卫之后,我意识到它们在这里不能作为替代品。尽管它们在xy可以减少到时提供相同的结果I _,但当模式保护不匹配时,它们不会减少任何值。我仍然想reduce简化Add等人的子表达式。

0 投票
2 回答
308 浏览

scala - 你如何与球拍中的后卫搭配?

在 Scala 中,您可以执行以下操作:

是否可以使用 Racket 的形式做这样的事情match我在文档中找不到

对于那些不熟悉 Scala 的人来说,如果数字等于或小于 0,则第一种情况匹配,第二种情况只是匹配其他所有内容的通配符

换句话说,我会在???现场写什么来实现与我上面描述的类似的功能?

0 投票
2 回答
79 浏览

f# - 如何在参数级别使用匹配,有可能吗?卫兵?

例如

所以我有我不喜欢的副作用,因为它是错误的:MatchFailureException

我知道我在这里可以有很好的副作用:let foo = if false then ()

但是警告Incomplete pattern matches on this expression.告诉我,我可以添加我需要的东西。我只是不知道如何或是否可能?否则为什么我什至可以使用值作为参数?

顺便说一句:我知道我会写When b d = if b then d else (),但问题更笼统。

在 haskell 中添加解释

0 投票
2 回答
460 浏览

haskell - 除了模式保护之外,为什么不使用谓词保护?

除了模式保护之外,为什么不使用谓词保护?

会更漂亮:

甚至: