这不是一个家庭作业问题,而是一个考试学习指导问题.Prolog Vs Haskell中的模式匹配有什么区别?
我做了一些研究,阅读背后的理论并没有真正让我对两者有充分的理解.我在Prolog中看到,模式匹配是不同的,因为它具有统一变量的能力,因此能够通过分辨率推断并吐出可能的答案
eg ?- [a,b] = [a,X]
X = b
Run Code Online (Sandbox Code Playgroud)
现在我不确定如何在Haskell中显示模式匹配.我知道Prolog中显示的上述相同查询在Haskell中不起作用,因为Haskell无法像Prolog那样统一.我记得在Haskell得到相同答案的地方,你必须通过警卫明确告诉它.
我知道我非常接近理解它,但是我需要有人为我打破Barney风格所以我可以完全理解它并向12岁的人解释它.这已经困扰了我很长一段时间,我似乎无法找到一个可靠的解释.
顺便说一句,上面显示的例子只是向你们展示我到目前为止所学到的东西,而我实际上是想找到答案.我的主要问题与上述例子无关,而是完全理解两者之间的差异.
假设我们有以下Haskell:
data T = T0 | T1 | T2 | ... | TN
toInt :: T -> Int
toInt t = case t of
T0 -> 0
T1 -> 1
T2 -> 2
...
TN -> N
Run Code Online (Sandbox Code Playgroud)
在这里使用什么算法来执行模式匹配?我看到两个选择:
(1)线性搜索,类似于
if (t.tag == T0) { ... }
else if (t.tag == T1) { ... }
else ...
Run Code Online (Sandbox Code Playgroud)
(2)二进制搜索,在这个特定任务中是明智的:在t.tag集合{ TO... T1023}中搜索.但是,在模式匹配通常具有许多其他功能和概括的情况下,可能不会使用此功能.
使用GHC进行编译,使用什么算法,对于模式匹配,使用N的时间复杂度t是toInt多少?
compiler-construction complexity-theory haskell pattern-matching
是否可以忽略case类的equals/haschode方法中的case类的字段?
我的用例是我有一个字段,它基本上是类中其余数据的元数据.
我有以下Scala代码.
import scala.actors.Actor
object Alice extends Actor {
this.start
def act{
loop{
react {
case "Hello" => sender ! "Hi"
case i:Int => sender ! 0
}
}
}
}
object Test {
def test = {
(Alice !? (100, "Hello")) match {
case i:Some[Int] => println ("Int received "+i)
case s:Some[String] => println ("String received "+s)
case _ =>
}
(Alice !? (100, 1)) match {
case i:Some[Int] => println ("Int received "+i)
case s:Some[String] => println ("String received …Run Code Online (Sandbox Code Playgroud) 我有一个功能:
def func(a: int, b: int, c: double): int
Run Code Online (Sandbox Code Playgroud)
我想要匹配各种可能的场景
c0,返回b-ac> 9,返回0a=b返回0依此类推,在做一些更复杂的逻辑之前,如果没有满足上述要求.
我必须先单独匹配c,还是可以匹配a,b,c,比如_,_,0?
你可以写:
str match { case "foo" | "bar" => ... }
Run Code Online (Sandbox Code Playgroud)
乍一看,它看起来|可能是一个提取器对象,但是:
str match { case |("foo", "bar") => ... }
Run Code Online (Sandbox Code Playgroud)
不起作用.(我无法看到无论如何都可以实现.)
那么它是一个神奇的内置运营商?
(我相信我之前已经在SO上看过这个问题了,但是找不到......)
我正在阅读有关KMP字符串匹配的内容.
它需要通过构建前缀表来预处理模式.
例如,对于字符串ababaca,前缀表是: P = [0, 0, 1, 2, 3, 0, 1]
但我不清楚数字显示的是什么.我读到它有助于在模式转换时找到模式的匹配但我无法将此信息与表中的数字相关联.
我是编程和处理函数的新手,如果句子中出现一个单词,则返回true.我尝试了这种indexOf()方法,但后来我也遇到了这种方法的某个问题:
假设我的判决是 I am a, Java Programmer.
如果我们看一下这个词ram用的indexOf()方法,那么它将返回true因为ram存在Programmer而应该是正确的输出false为ram不存在的词,但作为一种模式.
我该如何解决这个问题?我现在使用的代码是:
boolean isPresent(String word, String sentence)
{
if(sentence.indexOf(word) >= 0)
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
注意:这个词ram只是一个例子来说明我当前的方法存在的问题之一.并不是我必须一直ram只能处理.这个词可以是任何类似的a,在上面的句子后面跟着一个逗号.
更新:感谢大家提供他们的意见和解决方案.我选择了一个作为一个被接受的答案(如果允许,会选择更多:-)),但很多都是有帮助的.
我有一个字符串.结局是不同的,例如index.php?test=1&list=UL或index.php?list=UL&more=1.我正在寻找的一件事是&list=.
如何匹配它,无论是在字符串的中间还是在结尾?到目前为止我已经有了[&|\?]list=.*?([&|$]),但这个([&|$])部分实际上并没有起作用; 我正在尝试使用它来匹配&字符串的任何一个或结尾,但是字符串部分的结尾不起作用,所以这个模式匹配第二个例子而不是第一个例子.
以下两个查询组件的性能如何比较?
更喜欢
... LOWER(description) LIKE '%abcde%' ...
Run Code Online (Sandbox Code Playgroud)
我喜欢
... description iLIKE '%abcde%' ...
Run Code Online (Sandbox Code Playgroud) postgresql performance pattern-matching database-performance
pattern-matching ×10
scala ×4
haskell ×2
actor ×1
algorithm ×1
class ×1
java ×1
javascript ×1
performance ×1
postgresql ×1
prolog ×1
regex ×1
string ×1
unchecked ×1