Tag: 模式匹配

Python中列表的模式匹配

我想在Python中的列表上做一些模式匹配。 例如,在Haskell中,我可以做如下的事情: fun (head : rest) = … 所以当我通过一个列表时, head将是第一个元素, rest将是尾随元素。 同样,在Python中,我可以自动解包元组: (var1, var2) = func_that_returns_a_tuple() 我想用Python中的列表做类似的事情。 现在,我有一个函数返回一个列表,以及一段代码,它会执行以下操作: ls = my_func() (head, rest) = (ls[0], ls[1:]) 我想知道我是否可以用Python中的某一行来做这件事,而不是两件事。

如何模式匹配大型斯卡拉案例类?

考虑下面的Scala案例类: case class WideLoad(a: String, b: Int, c: Float, d: ActorRef, e: Date) 模式匹配允许我提取一个字段并丢弃其他字段,如下所示: someVal match { case WideLoad(_, _, _, d, _) => d ! SomeMessage(…) } 我想要做什么,当一个case类有20个奇数字段时,更有意义的是仅仅提取一些不涉及WideLoad(_, _, _, _, _, some, _, _, _, thing, _, _, interesting) 。 我希望命名的参数可以在这里帮助,虽然下面的语法不起作用: someVal match { case WideLoad(d = dActor) => dActor ! SomeMessage(…) // […]

OCaml:在另一个expression式中匹配expression式?

我目前正在与OCaml一起开展一个小型项目。 一个简单的mathexpression式简化器。 我应该在expression式中find某些模式,并简化它们,以减lessexpression式中括号的数量。 到目前为止,我已经能够实现除了两个以外的大多数规则,为此我决定创build一个recursion的,模式匹配的“filter”函数。 我需要实现的两个规则是: – 将formsa – (b + c)或类似forms的所有expression式转换为a – b – c – 将a /(b * c)或类似forms的所有expression式转换为a / b / c …我怀疑是相当简单的,一旦我设法实现一个,我可以很容易地实现其他。 但是,我遇到了recursion模式匹配function的麻烦。 我的typesexpression是这样的: type expr = | Var of string (* variable *) | Sum of expr * expr (* sum *) | Diff of expr * expr (* difference *) […]

一个范围可以在Scala中匹配吗?

是否有可能在Scala中匹配一系列值? 例如: val t = 5 val m = t match { 0 until 10 => true _ => false } 如果t在0和10之间, m将是true ,否则为假。 这一点当然不起作用,但有什么办法可以达到这样的效果吗?

检查string是否以特定模式结束

如果我有像这样的string: This.is.a.great.place.too.work. 要么: This/is/a/great/place/too/work/ 比我的程序应该给我的句子是有效的,它有“工作”。 如果我有 : This.is.a.great.place.too.work.hahahha 要么: This/is/a/great/place/too/work/hahahah 那么我的程序就不应该给我这个句子里有一个“工作”。 所以我正在看Java的string,以find一个字在最后的感激。 ,或者/之前。 我怎样才能做到这一点?

如何在Scala中使用开关/shell(简单模式匹配)?

我发现自己陷在了一件很平凡的事情上: – ] 我有一个枚举: object Eny extends Enumeration { type Eny = Value val FOO, BAR, WOOZLE, DOOZLE = Value } 在代码中,我必须有条件地将其转换为数字(varianr-number的对应关系不同)。 我写: val en = BAR val num = en match { case FOO => 4 case BAR => 5 case WOOZLE => 6 case DOOZLE => 7 } 这给了我一个“无法访问的代码”编译器错误的每个分支,但无论是第一个(“案例FOO => 4在这种情况下)。 我究竟做错了什么?

find高质量和低质量,像素化图像之间的匹配 – 有可能吗? 怎么样?

我有个问题。 我的公司给了我一个非常无聊的任务。 我们有两个对话框的数据库。 其中一个数据库包含可怕的质量图像,另一个质量很高。 不幸的是,可怕的质量对话包含其他信息的重要映射。 我一直负责手动处理所有不好的图像,并将它们匹配到良好的图像。 是否有可能在任何程度上自动化这个过程? 以下是两个对话框(从Google图像中随机抽取)的示例: 所以我现在正在用C#编写一个程序,把这些照片从数据库中拉出来,循环遍历它们,find具有相同形状的照片,然后返回它们的ID。 我最好的select是什么?

SQL Server LIKE包含括号字符

使用SQL Server 2008.我有一个表格,具有以下列: sampleData (nvarchar(max)) 其中一些行中的此列的值是格式如下的列表: ["value1","value2","value3"] 我试图写一个简单的查询,将返回所有行与列表格式化,只要检测到左括号。 SELECT * from sampleTable where sampleData like '[%' 上面的查询不起作用,因为'['是一个特殊的字符,我不能为我的生活弄清楚如何转义括号,所以我的查询做我想要的。 感谢您的任何build议!

Scala:返回布尔值的模式匹配的简短forms

我发现自己经常写这样的东西: a match { case `b` => // do stuff case _ => // do nothing } 有没有更简单的方法来检查一些值是否符合模式? 我的意思是,在这种情况下,我可以只写if (a == b) // do stuff ,但如果模式更复杂呢? 就像匹配列表或任意复杂的模式一样。 我想能够写这样的事情: if (a matches b) // do stuff 我相对比较新的斯卡拉,所以请原谅,如果我想念的东西大:)

有意义的Javascript模糊search

我正在寻找一个模糊searchJavaScript库来过滤一个数组。 我试过使用fuzzyset.js和fuse.js ,但结果是可怕的(有演示你可以尝试在链接的页面)。 在对Levenshtein距离进行了一些阅读之后,我觉得这是对用户input内容的一种不好的估计。 对于那些不知道的人,系统会计算出两个string匹配需要多less个插入 , 删除和replace 。 在Levenshtein-Demerau模型中固定的一个明显的缺陷是blub和boob被认为与bulb相似(每个都需要两个replace)。 然而,很清楚的是, 灯泡比胸部更接近巴巴 ,我刚才提到的模型认识到,允许换位 。 我想在文本完成的情况下使用它,所以如果我有一个数组['international', 'splint', 'tinder'] ,我的查询是int ,我认为国际应该比夹板更高,甚至尽pipe前者的得分(较高=较差)为10,而后者为3。 所以我正在寻找(如果不存在,将会创build)是一个库,它执行以下操作: 权衡不同的文本操作 每个操作的权重取决于它们在单词中出现的位置(早期操作比后期操作更昂贵) 返回按相关性sorting的结果列表 有没有人遇到过这样的事情? 我意识到,StackOverflow不是要求软件推荐的地方,而是隐含的(不再是!)在上面是:我想这是正确的方式吗? 编辑 我find了关于这个问题的好文章(pdf) 。 一些笔记和摘录: 仿射编辑距离函数为插入或删除序列分配相对较低的成本 Monger-Elkan距离函数(Monge&Elkan 1996)是Smith-Waterman距离函数的仿射变体(Durban et al。1998),具有特定的成本参数 对于Smith-Waterman距离(维基百科) ,“Smith-Watermanalgorithm不是查看总序列,而是比较所有可能长度的片段,并优化相似性度量。 这是n-gram方法。 一个非基于编辑距离模型的广泛相似的度量是Jaro度量(Jaro 1995; 1989; Winkler 1999)。 在logging连接文献中,使用这种方法的变体已经获得了良好的结果,该变体基于两个string之间的共同字符的数量和顺序。 由于Winkler(1999)的这种变化也使用了最长公共前缀的长度P. (似乎主要用于短string) 为了完成文本,Monger-Elkan和Jaro-Winkler方法似乎是最有意义的。 温克勒对Jaro度量的join有效地加重了单词的开始。 而Monger-Elkan的亲切的方面意味着完成一个单词(这只是一系列加法)的必要性不会太过分。 结论: 在几个基于令牌的距离度量中TFIDF排名performance最好,Monge和Elkan提出的调整后的仿射间距编辑距离度量在几个string编辑距离度量中performance最好。 一个令人惊讶的好距离度量是一个快速启发式scheme,由Jaro提出,后来由Winkler进行了扩展。 这种方法几乎和Monge-Elkanscheme一样,但速度要快一个数量级。 结合TFIDF方法和Jaro-Winkler的一个简单方法是用基于Jar-Winklerscheme的近似令牌匹配replaceTFIDF中使用的确切的令牌匹配。 平均来说,这个组合的performance稍好于Jaro-Winkler或TFIDF,偶尔performance会好得多。 在本文中考虑的几个最好的度量的学习组合也是接近的。