问题标签 [pattern-matching]

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 投票
31 回答
4215168 浏览

regex - 正则表达式匹配不包含单词的行

我知道可以匹配一个单词,然后使用其他工具(例如grep -v)反转匹配项。但是,是否可以匹配不包含特定单词的行,例如hede,使用正则表达式?

输入:

代码:

期望的输出:

0 投票
5 回答
1891 浏览

language-agnostic - 任何用于模式匹配和重写源代码的软件?

我有一些旧软件(使用的语言还没有死,但对我来说已经死了;-))为源代码实现了基本的模式匹配和重写系统。我正在考虑恢复这段代码,将其翻译成现代语言,并将项目作为重构动力工具开源。在我走得更远之前,我想知道这样的事情是否已经存在(我的 google-fu 今晚正在宣传这件事)。

以下是它的工作原理:

  • 模式匹配部分使用具有绑定变量的模板匹配跨越多行代码的源代码模式,
  • 模式重写部分使用模板重写匹配的代码,从匹配的模板插入绑定变量的内容
  • 匹配和重写模板通过一个简单的(无条件的)重写规则关联(1:1)

该软件对输入应用程序的抽象语法树 (AST) 进行操作,并输出修改后的 AST,然后可以将其重新生成为新的源代码

例如,假设我们发现一堆真正应该是 for 循环的 while 循环。以下模板将匹配 while-loop 模式:

而以下模板将指定输出重写模式:

和一个简单的规则来关联它们

所以看起来像这样的代码

自动改写成这样

我见过的最接近这样的东西是一些代码重构工具,但它们似乎是针对选定片段的交互式重写,而不是大规模的自动更改。

我相信这种工具可以增强重构,并且可以在多种语言(甚至 HTML/CSS)上工作。我也相信转换和完善代码库将是一个巨大的项目,我根本无法在任何合理的时间内单独完成。

那么,已经有类似的东西了吗?如果没有,是否需要考虑任何明显的特征(除了重写规则条件)?

编辑:我非常喜欢这个系统的一个特点是模板模式相当明显且易于阅读,因为它们是用与目标源代码相同的语言编写的,而不是一些深奥的变异正则表达式/BNF 格式。

0 投票
2 回答
454 浏览

f# - 你能嵌套一个“双重缺点”模式匹配吗?

我想加强一种模式以仅匹配通过附加验证功能的数字。

'One' 的情况很简单:

“二”的情况对我来说并不明显。它需要验证数字的总和。我可以在不使用 when-guard 的情况下做到这一点吗?

...

编辑:我可以像这样使用 when-guard(带有返回布尔值的 isValid 函数):

这不如仅仅匹配一个模式那么优雅;更糟糕的是,a + b 被应用了两次。

另请注意,这是我的实际代码的简化版本(例如,我不是试图简单地匹配不同长度的列表) - 问题是关于双 cons 模式的嵌套匹配。

0 投票
3 回答
3668 浏览

haskell - 在 Haskell 中哪个更有效;模式匹配或嵌套 if/case 语句?

我只是对 Haskell 中模式匹配的效率感到好奇。什么是模式匹配比嵌套if/case语句更好的简单情况,然后反过来呢?

谢谢你的帮助。

0 投票
4 回答
7997 浏览

haskell - 在 Haskell 中解构元组时,可以在哪里使用元素?

我正在阅读使用以下示例的教程(我将对其进行概括):

我的问题在于,您似乎可以在获取它们的元组之外按名称引用xand 。bar如果我的猜测是正确的,这似乎就像在其他语言中解构参数列表一样。(换句话说,我不必执行以下操作:)

我对这种行为是否正确?我从未在我一直在阅读的教程/书籍中看到它。有人可以指出有关该主题的更多信息吗?

编辑:可以以类似的方式解构任何东西(列表、数组等),还是只能用元组来解构?

0 投票
10 回答
6071 浏览

algorithm - 我应该使用哪种算法进行信号(声音)分类?

更新这个问题以前的标题为“给我一个简单的信号(声音)模式检测算法的名称

  1. 我的目标是检测噪声信号中给定模式的存在。我想检测一种用麦克风记录声音的昆虫的存在。我之前以数字格式录制了昆虫的声音。
  2. 我不想做语音识别。
  3. 我已经在输入信号和模式之间使用卷积来确定它们的相似度。但我认为这种技术更适合离散时间(即数字通信,其中信号以固定间隔出现)并区分两个给定模式之间的输入信号(我只有一个模式)。
  4. 我害怕使用神经网络,因为我从未使用过它们,而且我不知道是否可以嵌入该代码。

您能否指出一些其他方法,或者试图说服我我目前的方法仍然是一个好主意,或者神经网络可能是一种可行的方法?

更新我已经有 2 个很好的答案,但另一个会受到欢迎,甚至会得到奖励。

0 投票
4 回答
2198 浏览

syntax - 如何在“让”定义中使用模式匹配?

我刚刚注意到 F# 允许我将 let 绑定与文字和其他模式一起使用,如下所示:

F# 正确地将这些函数解释为一种模式匹配,因为给了我以下警告:

警告 1 此表达式的模式匹配不完整。例如,值 '1' 将不匹配

警告 2 此表达式的模式匹配不完整。例如,值“[_]”将不匹配

等等

这些函数按预期工作,但我想以这种样式定义一个具有完整模式匹配的函数,但是我在 F# 手册中找不到关于这种替代模式匹配语法的任何信息。

我知道我可以使用let whatever = function ...let whatever x = match x with ...获得我想要的结果,但是我刚刚发现了另一种模式匹配语法,如果我不知道如何使用它,它会一直困扰着我。

如何使用上面显示的替代模式匹配语法编写函数?

0 投票
3 回答
496 浏览

algorithm - 如何存储套装,快速找到相似的图案?

(这不是作业,也不是工作问题。这只是我个人的兴趣/职业,完全是虚构的。但我对好的算法或数据结构感兴趣。)

假设,我会经营一个约会网站。而我的特点是单曲与电影品味相匹配。(为什么不?)

在这种情况下,我需要一种方法来存储每个用户的电影评分。(到目前为止没问题。)我需要一个数据结构来找到最合适的用户。两种口味模式之间的距离将是两个用户做出的所有评分之间的平均距离。

例子

距离(X,Z) = avg( abs(9-9) + abs(1-4) ) = 1.5

距离(Y,Z) = avg( abs(4-6) + abs(6-4) + abs(8-7) ) = 1.666

因此,X 先生比 Y 先生更适合 Z 女士。

我喜欢那个...

  • ...不需要对数据库进行很多操作
  • ...不需要处理大量数据
  • ... 快跑
  • ...提供最佳匹配
  • 好的,也许我也会考虑好的近似值。

请记住,这也应该适用于数以千计的可能电影、仅对大约 20-50 部电影评分的用户以及数以千计的用户。

(因为这是一个心理难题,而不是真正的问题,所以工作场所并没有真正的帮助。)

你的搜索算法或数据结构是什么?

0 投票
5 回答
1900 浏览

c++ - C++ 中的表达式求值

我正在为家庭作业编写一些类似 excel 的 C++ 控制台应用程序。我的应用程序应该能够接受其单元格的公式,例如它应该评估如下内容:

或者

或者

或者

类似的东西。函数有 Sum、Ave、Sin、Cos、Tan、Cot、Mul、Div、Pow、Log (10)、Ln、Mod

这很可悲,我知道,但这是我的作业:'(

那么有人知道评估这样的事情的技巧吗?

0 投票
7 回答
896 浏览

regex - 如何正确匹配正则表达式?

我有一个ldapsearch如下输出的对象列表:


到目前为止,我有以下正则表达式:

它返回如下结果:


我需要一个返回如下结果的正则表达式:

我需要在我的正则表达式中更改什么以便模式(cn=和逗号)不包含在结果中?

编辑:我将用于进行sed模式匹配,并将输出通过管道传输到其他命令行实用程序。