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

haskell - 在 Haskell 中定义一个函数的 2 个或多个方程可以共享相同的 where / let 块吗?

在 Haskell 中定义一个函数的 2 个或多个方程可以共享相同的 where / let 块吗?

让我举一个人为的例子来说明这个问题。

首先,考虑以下代码作为起点:

到目前为止,一切都很好。但是,假设我需要处理“另一种情况”,如果 v3 == 99 并且差异 < 4(完全任意,但假设这些是我的要求),我需要返回零。

我的第一个想法是这样做:

但是,这是行不通的,因为 someFunction 的第一个方程和 someFunction 的第二个方程并不共享相同的 where 块。在这个人为的示例中,这没什么大不了的,因为 where 块中只有一个变量(“差异”)。但在现实世界的情况下,可能存在大量变量,重复它们是不可接受的。

我已经知道如何通过使用守卫并且只有一个方程来解决这个问题。问题是,有没有办法让多个方程共享相同的 where / let 子句?因为有多个具有不同模式的方程似乎是可取的,而不是被迫只有一个方程有很多守卫。

0 投票
5 回答
1807 浏览

regex - 如何为特定的 Perl 变量分配多个值?

我正在用 Perl 编写一个脚本,它在蛋白质序列(字符串)中搜索一个主题(子字符串)。要搜索的主题序列(或子字符串)是 hhhDDDssEExD,其中:

  • h是任何疏水性氨基酸
  • s是任何小氨基酸
  • x是任何氨基酸
  • h,s,x可以分别有多个

一个变量可以分配多个值吗?如果是,我该怎么做?我想将多个值的列表分配给一个变量。

0 投票
6 回答
3015 浏览

haskell - 是否建议在 Haskell 中始终进行详尽的模式匹配,即使对于“不可能”的情况也是如此?

是否建议在 Haskell 中始终进行详尽的模式匹配,即使对于“不可能”的情况也是如此?

例如,在下面的代码中,我在 foldr 的“累加器”上进行模式匹配。我完全控制了累加器的内容,因为我创建了它(它不是作为输入传递给我的,而是在我的函数中构建的)。因此,我知道某些模式永远不应该匹配它。如果我力求永远不要出现“模式匹配不完全”错误,那么我会为其放置一个模式匹配,该错误只是带有“此模式不应该发生”的消息。很像 C# 中的断言。我想不出还有什么可做的。

在这种情况下,你会推荐什么做法,为什么?

这是代码:

不匹配的模式(由解释器报告)是:

警告:模式匹配并非详尽无遗在另一种情况下:模式不匹配:[]:_

0 投票
2 回答
1202 浏览

c# - 当单词出现的顺序或次数不重要时,两个字符串之间的最佳匹配?

当单词出现的顺序或次数不重要时,匹配或计算 C# 中两个字符串之间距离的最佳算法是什么?

最佳手段:

  • 大多同意人类比赛
  • 优雅的
  • 高效的
  • 可扩展,以便输入字符串可以匹配到可能很大的其他字符串集合

相关问题:

一些注意事项:

  • 由于顺序和出现的独立性,输入可以被认为是一组独特的单词,而不是字符数组意义上的字符串
  • 不是专门寻找数据库解决方案,虽然会很有趣
  • 我太老了,不能成为家庭作业问题;)
0 投票
7 回答
1337 浏览

algorithm - 比较单词的算法(不按字母顺序)

我需要为某个要求编写一个解决方案,我想知道是否有人熟悉可以实现它的现成库,或者可以指导我最佳实践。描述:

用户输入一个应该是几个固定选项之一的单词(我将选项保存在一个列表中)。我知道输入必须在列表中的成员中,但由于是用户输入,他/她可能犯了错误。我正在寻找一种算法,它可以告诉我用户最可能的意思是什么。我没有任何上下文,我不能强迫用户从列表中选择(即他必须能够自由地手动输入单词)。

例如,假设列表包含单词“water”、“quartz”、“beer”、“beet”、“hell”、“hello”和“aardvark”。

解决方案必须考虑不同类型的“正常”错误:

  • 速度拼写错误(例如双字符、删除字符等)
  • 键盘相邻字符拼写错误(例如“水”的“qater”)
  • 非母语英语拼写错误(例如,“quater”代表“季度”)
  • 等等...

显而易见的解决方案是逐个字母进行比较,并对每个不同的字母、多余的字母和缺失的字母给予“惩罚权重”。但是这个解决方案忽略了我确定在某处列出的数千个“标准”错误。我确信有一些启发式方法可以处理所有特定和一般情况,可能使用标准不匹配的大型数据库(我对数据密集型解决方案持开放态度)。

我正在用 Python 编码,但我认为这个问题与语言无关。

有什么建议/想法吗?

0 投票
1 回答
556 浏览

xslt - XSL Rookie - 我能否在不重复整个“if test”块的情况下制作一个匹配“this phrase”的 XSL 也匹配“ths fraze”?

我是一个完整的 XSL 新手,正在编写一个 XSL 文件来将可能出现在应用程序创建的输出日志中的许多不同的错误消息格式化为 CSV 格式。

这些输出日志中的可匹配标签可能会略有不同。例如,日志中的一个句子可能包含短语“Service Month/Year:”,但来自应用程序不同区域的另一个句子将包含“Svc Month/Yr:”。

有没有办法将该短语的这两种变体放在我的 XSL 的一行中?或者我是否必须重复整个 If 块,以及我想在其自己的 If 块中匹配的短语中的每个变体?

我尝试在此处发布被反引号包围的 XSL,但它在一个无法阅读的大块中运行。如果有人可以帮助解决这个问题,如果您告诉我如何使其可读,我很乐意发布。:-)

谢谢你。

0 投票
3 回答
394 浏览

c++ - 模式匹配中的变量替换?

我正在开发一个推理引擎,这意味着基本上我有一定数量的“事实”,这些“事实”基本上代表了某个时刻的世界。连同事实(通常只有两个,起始状态和目标状态),我有许多规则(对于某些问题,实际上可能是数百个)。推理引擎的目标是,给定一个起始状态和一组规则,找到到达可接受目标状态的最短路径。这可以通过多种算法来完成,例如 DFS、BFS 或 A*。该程序的基本结构是:

在规则中,LHS(> 之前的部分)匹配事实中等于“值”的每个属性。factname在这种情况下,它只有一个,但可能有很多。这意味着我必须解析变量(通常为同一事实多次解析),并且规则的 LHS 可能有多个条件放入和/或具有适当的优先级解析。

问题是:有没有办法有效地解决这种变量?我现在正在做的是迭代事实中的每个属性,基本上我正在生成一个非常大的 n-ary 树,它甚至是不平衡的,这非常慢,特别是考虑到上述条件。

我喜欢这种模式匹配的论文指针

0 投票
2 回答
323 浏览

sql - 用于存储过程的简单文本匹配算法

我在 sql server 数据库中有一个包含两个字段的表,我的 asp.net 应用程序调用一个带有“@SearchString”参数的存储过程,该存储过程查找在两个字段的串联中找到 @Searchstring 值的所有记录表,称它们为“Field1”和“Field2”

所以逻辑看起来像这样(我已经简化了实际的查询):

我想改进这个相当基本的匹配算法,以便它匹配的记录没有那么严格。例如,如果用户输入“DOG HOUSE”作为参数,现有 SP 中相当基本的逻辑将返回找到确切字符串的记录。我希望它也只返回带有“DOG”和“HOUSE”的记录,即使字符串并不完全相邻。

如果有一种方法可以根据“最佳匹配”对记录进行排名,那就更好了,即如果找到“DOG HOUSE”,它是完全匹配的,如果找到“DOG”和“HOUSE”,第二个最佳匹配,如果“dog but not 'house' 或 'house' but not 'dog' 第三最佳等。

是否有一种通用算法可以满足我的大部分需求?

0 投票
1 回答
249 浏览

erlang - ETS 匹配问题

我正在学习 ETS。我做了:

然后我输入:

然而,而不是得到8- 我得到:["\b"]作为输出!

0 投票
5 回答
6808 浏览

pattern-matching - 根据人名匹配记录

是否有任何工具或方法可用于在两个不同数据源之间通过人名进行匹配?

这些系统没有其他共同信息,而且在许多情况下输入的名称不同。

非精确匹配示例:

King Jr., Martin Luther = King, Martin (不包括后缀)
Erving, Dr. J. = Erving, J. (不包括前缀)
Obama, Barak Hussein = Obama, Barak (不包括中间名)
Pufnstuf, HR = Pufnstuf, Haibane Renmei (匹配缩写)
Tankengine,Thomas = Tankengine,Tom(匹配常用昵称)
Flair,Rick “the Natureboy” = Flair,Natureboy(匹配昵称)