标签: pattern-matching

这个案例类匹配模式是如何工作的?

我刚刚在Scala actors包中看到过这个case类:

case class ! [a](ch: Channel[a], msg: a)
Run Code Online (Sandbox Code Playgroud)

在JavaDoc中,它以下列形式描述了用法:

receive {
  case Chan1 ! msg1 => ...
  case Chan2 ! msg2 => ...
}
Run Code Online (Sandbox Code Playgroud)

为什么不是这样的:

receive {
  case !(Chan1, msg1) => ...
  case !(Chan2, msg2) => ...
}
Run Code Online (Sandbox Code Playgroud)

是砰的操作员!与以冒号结尾的方法类似的特殊情况:

scala pattern-matching case-class

13
推荐指数
1
解决办法
1684
查看次数

如何转义字符串以便与SQL Server中的LIKE运算符一起使用?

我正在寻找在SQL Server中工作的类似于@c#中的符号的东西,这会导致字符串被视为文字.例如:

string text = "abcd\\efg";
Output of text = abcd\efg

string text = @"abcd\\efg";
Output of text = abcd\\efg
Run Code Online (Sandbox Code Playgroud)

注意@如何影响字符串以按字符顺序获取每个字符.

现在我不确定这是可能的,但这是我的问题,也许有更好的方法来解决这个问题.请考虑以下基本查询:

SELECT [Name] 
  FROM [Test] 
 WHERE [Name] LIKE (@searchText + '%')
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果他们把一个%,_或任何其他的那些特殊字符,可以影响我喜欢条款.我希望这场比赛就像一个'开始'功能.那么有什么我可以应用于@searchText来说明这一点,或者是否有可能是一个我没想到的更好的解决方案?

编辑:我不希望解决方案是客户端清理.我需要这个存储过程工作,而不依赖于被清理传递的数据.

sql t-sql sql-server pattern-matching

13
推荐指数
2
解决办法
1万
查看次数

如何使用vararg案例类进行模式匹配?

我有一组像这样的案例类

abstract class Shape  
case class Rectangle(width: Int, height: Int) extends Shape  
case class Location(x: Int, y: Int, shape: Shape) extends Shape  
case class Circle(radius: Int) extends Shape  
case class Group(shape: Shape*) extends Shape
Run Code Online (Sandbox Code Playgroud)

其中基本上Group是一个形状数组.我需要定义一个大小方法来计算矩形,圆形和位置的大小,它直接只返回一个.但我对集团有困难.

object size extends Shape{  
  def size(s: Any) : Int = s match {  
    case Rectangle(x,y) => 1  
    case Group  // how to do it? Also having case Group(shape : Shape*) gives an error  
    case Circle(r) => 1    
    case Location(x,y,shape) => 1   
  }  
}  
Run Code Online (Sandbox Code Playgroud)

我知道对于Group我需要使用map并向左折叠,但我真的无法为它创建逻辑.谢谢

functional-programming scala pattern-matching

13
推荐指数
2
解决办法
3202
查看次数

正则表达式匹配简单域

我想匹配一个简单的域名:example.com

但它的所有组合.

我该怎么做才能涵盖:

https://example.com
http://www.example.com
etc.

regex pattern-matching

13
推荐指数
3
解决办法
4万
查看次数

如何识别图像中的不同对象?

我打算编写一个程序来检测和区分某些对象与几乎可靠的背景.前景和背景具有高对比度差异,我将进一步增加以帮助对象识别过程.我打算使用Hough变换技术和OpenCV.

样本图片

如上图所示,我想分别识别圆形物体和方形物体(或有限形状的任何其他形状).由于我对图像处理很陌生,我不知道这种情况是否需要实现神经网络以及预先学习的每个形状.模板匹配等技术是否可以让我在没有神经网络的情况下实现这一目标?

opencv image-processing pattern-matching computer-vision

13
推荐指数
2
解决办法
2万
查看次数

当使用"when"时,F#不完整模式匹配此表达式.为什么?

我有这个简单的F#功能:

let compareNum x =
    let y = 10
    match x with
    | _ when x = y -> 0
    | _ when x > y -> 1
    | _ when x < y -> -1
Run Code Online (Sandbox Code Playgroud)

但是,F#编译器给出了"此表达式上的不完整模式匹配"警告.在这种情况下,所有案例都应涵盖所有模式.

我还在Chris Smith的第1版Programming F#book中的"Pattern Matching"部分看到了一个类似的例子.所以在F#的后期版本中可能会改变某些内容?

f# pattern-matching guard-clause

13
推荐指数
1
解决办法
2752
查看次数

是否可以在idris的函数定义中使用保护?

在haskell,人们可以写:

containsTen::Num a => Eq a => [a] -> Bool
containsTen (x : y : xs)
    | x + y == 10 = True
    | otherwise = False
Run Code Online (Sandbox Code Playgroud)

是否有可能在伊德里斯写一些相同的东西,而不用它ifThenElse(我的真实案例比上面的更复杂)?

syntax pattern-matching guard-clause idris

13
推荐指数
1
解决办法
1369
查看次数

部分匹配长度的正则表达式 - 字符串相似度

假设我有字符串"Torcellite"和另一个字符串"Tor" - 这两个字符串的相似长度是3,因为它们都以"Tor"开头.现在另一个字符串"christmas"和"mas"的相似度为0,因为它们不是以相同的字符集开头的.

在这两种情况下,第二个字符串都是第一个字符串的后缀.

一个更清晰的例子:

字符串长度:1到10 ^ 5

串: abaabc

后缀:abaabc,baabc,aabc,abc,bc,c

相似度:abaabc,无,a,ab,无,无

相似度长度:6,0,1,2,0,0

答案:6 + 0 + 1 + 2 + 0 + 0 = 9

我有一个低效的逻辑来使用正则表达式找到这些部分后缀匹配.

算法:

  • 找到给定字符串的所有子字符串.
  • 从后缀的子串创建一个模式.

    for(int i=1; i<substrings[i].length; i++) {
        Pattern p = Pattern.compile("^"+substrings[i].substring(0, i));
        Matcher m = p.find(string); //the given string for which similarities need to be  calculated
        if(m.find())
            similaryLengths +=  i;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 这种复杂性大致为O(n ^ 2),因为我需要通过字符串为后缀,然后是模式的子串.

  • 我曾想过在模式中使用分组来查找组,但我不确定正则表达式会是什么样子.我想到的是第一个子串是: …

java regex string pattern-matching

13
推荐指数
1
解决办法
1707
查看次数

使用后缀数组和LCP(-LR)实现字符串模式匹配

在过去的几周里,我试图弄清楚如何在另一个字符串中有效地找到字符串模式.

我发现很长一段时间,最有效的方法是使用后缀树.但是,由于这种数据结构在空间上非常昂贵,我进一步研究了后缀数组的使用(使用的空间要少得多).不同的论文,如"后缀数组:一种新的在线字符串搜索方法"(Manber&Myers,1993)指出,搜索子字符串可以在O(P + log(N))中实现(其中P是通过使用二进制搜索和后缀数组以及LCP数组,模式的长度和N是字符串的长度.

我特别研究了后一篇论文来理解搜索算法.这个答案在帮助我理解算法方面做得非常出色(并顺便将其纳入LCP维基百科页面).

但我仍在寻找实现此算法的方法.特别是所提到的LCP-LR阵列的构造看起来非常复杂.

参考文献:

Manber&Myers,1993:Manber,Udi; Myers,Gene,SIAM Journal on Computing,1993,Vol.22(5),pp.935-948,http: //epubs.siam.org/doi/pdf/10.1137/0222058

更新1

只是为了强调我感兴趣的东西:我理解LCP数组,并找到了实现它们的方法.但是,"普通"LCP阵列不适合有效的模式匹配(如参考文献中所述).因此,我对实现LCP-LR阵列感兴趣,这似乎比实现LCP阵列复杂得多

更新2

添加了参考文件的链接

c c++ string pattern-matching

13
推荐指数
1
解决办法
3994
查看次数

模式匹配列表,正好在Haskell中有2个元素

我刚刚开始学习Haskell,我正在尝试使用模式匹配来匹配具有正好2个元素的列表.作为练习,我正在尝试编写一个函数,该函数返回列表中的一个但最后一个元素.到目前为止我发现了这个:

myButLast :: [a] -> a
myButLast [] = error "Cannot take one but last from empty list!"
myButLast [x] = error "Cannot take one but last from list with only one element!"
myButLast [x:y] = x
myButLast (x:xs) = myButLast xs
Run Code Online (Sandbox Code Playgroud)

现在使用myButLast [x:y]的行显然不正确,但我不知道如何匹配具有正好2个元素的列表,因为这就是我正在尝试做的事情.我读了这篇文章(http://learnyouahaskell.com/syntax-in-functions#pattern-matching)这对我帮助很大,但我还没完全到那里......

haskell pattern-matching

13
推荐指数
1
解决办法
1万
查看次数