问题标签 [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 投票
3 回答
2724 浏览

haskell - 当模式匹配失败时,为什么 Haskell 列表推导不会导致错误?

我试图了解 Haskell 列表理解在模式匹配方面是如何“在幕后”工作的。以下 ghci 输出说明了我的观点:

如您所见,它能够跳过“Nothing”并仅选择“Just”值。我知道 List 是一个单子,定义为(来自 Real World Haskell,第 14 章):

因此,列表推导基本上为列表推导中选择的每个元素构建一个单例列表并将它们连接起来。如果模式匹配在某个步骤失败,则使用“失败”函数的结果。换句话说,“Just x”模式不匹配,因此 [] 用作占位符,直到调用 'concat'。这就解释了为什么“无”似乎被跳过了。

我不明白的是,Haskell 怎么知道调用“失败”函数?它是“编译器魔法”,还是您可以在 Haskell 中自己编写的功能?是否可以编写以下“选择”函数以与列表理解相同的方式工作?

0 投票
4 回答
1354 浏览

pattern-matching - 确定两个或多个摘要是否相似

问题如下:

我有一个摘要,通常在 20 到 50 个单词之间,我想将其与其他相对相似的摘要进行比较。摘要所指的一般类别和地理位置是已知的。

例如,如果来自同一地区的人们正在撰写关于建造房屋的文章,我希望能够列出这些摘要,并且在一定程度上确定他们实际上指的是建造房屋而不是建造车库或后院游泳池。

该数据集目前大约有 50 000 个文档,每天大约有 200 个文档的增长速度。

首选语言是 Python、PHP、C/C++、Haskell 或 Erlang,无论哪种语言都能完成工作。另外,如果您不介意,我想了解选择特定语言的原因。

0 投票
4 回答
3243 浏览

ruby-on-rails - Ruby 正则表达式帮助使用匹配来提取 html 文档片段

我有一个这种格式的 HTML 文档:

所以它交替出现 - 联系信息块,然后是“联系分隔符”。我想获取联系信息,所以我的第一个障碍是获取联系人分隔符之间的块。我已经弄清楚了使用 rubular 的正则表达式。这是:

您可以检查 rubular 以验证这是否隔离了块。

然而,我最大的问题是我在使用 ruby​​ 代码时遇到了问题。我使用内置的匹配功能并进行打印,但没有得到我期望的结果。这是代码:

请注意,page.body 只是 Mechanize 抓取的 html 文档的正文。html 文档要大得多,但具有这种格式。因此,意外的输出如下:

这里有两个惊喜给我:

1) 没有 2 个匹配项包含联系信息块,即使在 rubular 上我已经验证应该提取这些块。

2) 所有的 \r\n\t(换行符、制表符等)都显示在匹配项中。

任何人都可以在这里看到这个问题吗?

或者,如果有人知道一个好的免费 AOL 联系人进口商,那就太好了。我一直在使用黑皮书,但它在 AOL 上一直失败,我正在尝试修复它。不幸的是,AOL 还没有联系人 API。

谢谢!

0 投票
6 回答
3592 浏览

algorithm - 目前认为 2D 点匹配的“最佳”算法是什么?

我有两个包含 xy 坐标(星)的列表。我还可以将星等(亮度)附加到每颗恒星上。现在每颗星星都有随机的位置抖动,每张图像中可能会有一些额外或缺失的点。我的问题是,“对于这样的数据集,最好的 2D 点匹配算法是什么?” 我猜对于简单的线性(平移、旋转、缩放)和非线性(例如,坐标中的 n 次多项式)都是如此。在点匹配领域的行话中,我正在寻找能够在具有噪声和伪点的 2D 点匹配程序之间的枪战中获胜的算法。可能会有不同的“赢家”,这取决于是否使用了标签信息(幅度)和/或转换是否被限制为线性。

我知道有许多类的 2D 点匹配算法和每个类中的许多算法(实际上可能总共有数百个),但我不知道哪个(如果有的话)被认为是“最好的”或“最标准的”计算机视觉领域的人们。可悲的是,我想阅读的许多文章都没有在线版本,我只能阅读摘要。在我决定实施一个特定的算法之前,最好听听几位专家的意见,把小麦从谷壳中分离出来。

我有一个使用三角形的有效匹配程序,但它经常失败(大约 5% 的时间),因此解决方案转换有明显的扭曲,但没有明显的原因。这个程序不是我写的,而是来自大约 20 年前写的一篇论文。我想编写一个性能最强大的新实现。我假设(希望)在这一领域取得了一些进展,这使得这变得合理。

0 投票
3 回答
184 浏览

php - 寻找一种干净、有效的方法来将一组数据与已知模式进行匹配

使用 php5.2 和 MySQL 4.1.22

我遇到过一些事情,起初看起来很简单,但后来就一个简单、干净的解决方案避开了我。

我们有预定义的产品“包”。包装 1 中可能包含产品 A、B 和 C。包2可能有A、C、D和G等。包的大小从3到5个产品不等。

现在,客户可以选择任何 10 种可用产品并制作“定制”包装。由于我们已经有某些预定义的包,我们希望尽可能使用更小的现有包(为了便于运输)来构建自定义包。

因此,例如,客户选择创建产品 A、B、C、D、E 和 F 的“自定义包”。我们已经有一个包含 A、B 和 C 的预定义包,称为 Foo。因此,顺序将是 Foo、D、E 和 F。

问题在于拥有最少数量的单个物品,其次是最少数量的包裹。例如:

定制包装:A、B、C、D、E、F、G、H、I、J。

预定义包 (1):A、B、C、D、E

预定义包 (2):A、B、C

预定义包 (3):D、E、F

如果我只是选择最大的匹配项,那么我有 1 个(5 件)包裹和 5 个单独的物品。包 (2) 和 (3) 都不能用剩余的项目构建。

如果我更深入地研究,我发现通过不构建包 (1),我可以构建包 (2) 和包 (3)。这意味着我有 2 个包裹和 4 个单独的物品(在这个商业规则中是一个更好的选择)。

当我使用 MySQL 时,我受限于只有一层子选择可用(据我所知)。所以这种排序需要在 php.ini 中执行。我已经研究过使用 array_intersect() 来确定匹配项,但是随着预定义包的数量线性增长,我发现的每种方式在处理方面都呈指数增长。

我和其他几个程序员朋友一起运行了这个,虽然看起来应该有一个简单的答案,但我们都发现它并不像看起来那么简单。所以,我想我会把它贴在这里作为一个很好的面条担架。非常感谢您抽出宝贵时间!

0 投票
3 回答
8666 浏览

scala - 将字符串匹配为 Seq[Char] 的模式

在 Scala 中,可以通过将字符串视为 Seq[Char] 来基于字符串的单个字符来制定模式。

A Tour of Scala中提到了此功能的一个示例

这是那里使用的示例代码:

}

我遇到的问题是代码段的第三行:

为什么这种演员阵容是必要的?在所有情况下(包括模式匹配),字符串不应该表现得像 Seq[Char] 吗?但是,如果没有这种转换,代码片段将无法工作。

0 投票
2 回答
3962 浏览

scala - 为什么空字符串与 Seq.empty 不匹配?

编辑:这是很久以前在 Scala 2.8 及更高版本中修复的旧错误

在围绕问题Pattern 将 String 匹配为 Seq[Char] 的一些实验中,我遇到了另一个奇怪的匹配现象。考虑以下将字符串视为字符序列的代码:

正确调用空字符串上的输入会""产生"Empty".

但是,如果我将第一个匹配子句重写为

的匹配""失败并匹配默认子句。

浏览 Scala 库源代码(在理想的世界中你不应该这样做:-))我相信两者Seq()都会Seq.empty导致RandomAccessSeq.empty. 显然,这与上述现象不符,因为只Seq()匹配空字符串。

更新:经过进一步的实验,这个问题可以缩小到以下几点:

这基本上意味着空Seq不会自动等于Seq.empty。因此,当与常量匹配时(而不是使用 starblue 建议的提取器),这种不等式会导致匹配失败。将空解释String为序列时也是如此。

0 投票
4 回答
13319 浏览

performance - How is pattern matching in Scala implemented at the bytecode level?

How is pattern matching in Scala implemented at the bytecode level?

Is it like a series of if (x instanceof Foo) constructs, or something else? What are its performance implications?

For example, given the following code (from Scala By Example pages 46-48), how would the equivalent Java code for the eval method look like?

P.S. I can read Java bytecode, so a bytecode representation would be good enough for me, but probably it would be better for the other readers to know how it would look like as Java code.

P.P.S. Does the book Programming in Scala give an answer to this and similar questions about how Scala is implemented? I have ordered the book, but it has not yet arrived.

0 投票
2 回答
298 浏览

erlang - 为什么函数参数中没有动态位模式?

我正在 Erlang 中尝试位模式匹配:

在编译注释掉的版本时,test/2我收到一条抱怨“变量'P'未绑定”。有什么好的理由不允许第一个版本与第二个版本一样工作吗?

0 投票
5 回答
16740 浏览

regex - 匹配引号中的文本(新手)

我完全迷失在 shell 编程中,主要是因为我使用的每个站点都提供了不同的工具来进行模式匹配。所以我的问题是使用什么工具在管道流中进行简单的模式匹配。

上下文:我有 named.conf 文件,我需要一个简单文件中的所有区域名称以进行进一步处理。所以我做~$ cat named.local | grep zone 并在这里完全迷失。我的输出是 'zone "domain.tld" {' 形式的约一百个换行符,我需要双引号中的文本。

感谢您展示了一种方法。

Ĵ