我正在研究mtl图书馆并试图做一些我自己的MonadTransformers.我正在检查Control.Monad.State.StateT声明,并且在所有代码中,我看到了这种语法:
execStateT :: (Monad m) => StateT s m a -> s -> m s
execStateT m s = do
~(_, s') <- runStateT m s
return s'
Run Code Online (Sandbox Code Playgroud)
这个~操作数是什么意思?
从2个表格列表List[(Int, String):
l1 = List((1,"a"),(3,"b"))
l2 = List((3,"a"),(4,"c"))
Run Code Online (Sandbox Code Playgroud)
如何组合Integers String相同的s来获得第三个列表:
l3 = List((4,"a"),(3,"b"),(4,"c"))
Run Code Online (Sandbox Code Playgroud)
现在我正在遍历两个列表并添加字符串是否相同,但我认为应该有一个简单的模式匹配解决方案.
我有一个参考黑白图像,其中包含一个参考对象(例如硬币).该对象由用户标记,即感兴趣的区域.
现在我想分析其他图像并找到该对象或类似对象的位置和旋转.物体任意放置在相机下方,但从不缩放,视角始终为90度.
我评估了一个完全符合我要求的商业图书馆:Euresys EasyFind
您可以在下面找到手头任务的示例图像.当前的实现使用OpenCV的特征检测,并且无法正常工作.
模板:

找到同一枚硬币的匹配:

对于略有不同的硬币,比赛失败:

特征检测似乎是错误的方法.我需要以某种方式简单地对象.但如果我这样做(Blur,Canny,CornerHarris)功能检测根本不起作用.
我们非常感谢任何有关可靠方法的建议.一个替代的图书馆建议也会很棒.
可能重复:
变量名x和xs的历史记录是什么?
模式匹配中的规范名称"xs"来自哪里?
例如in
reverse' [] = []
reverse' [x] = [x]
reverse' (x:xs) = reverse' xs ++ [x]
Run Code Online (Sandbox Code Playgroud)
它应该是"x"的复数吗?
我已经开始通过Erik Meijer的13个部分讲座(以及Graham Hutton的幻灯片)来学习Haskell.
在第4章的幻灯片上,第13页介绍了n + k模式的模式匹配语法.特别是,它说:
与数学一样,整数函数可以使用n + k模式定义,其中n是整数变量,k> 0是整数常量.
pred :: Int -> Int
pred (n+1) = n
Run Code Online (Sandbox Code Playgroud)
当我在REPL中自己尝试这个时,我收到一条错误消息:
*Main> let mypred (n+1) = n
<interactive>:65:13: Parse error in pattern: n + 1
Run Code Online (Sandbox Code Playgroud)
同样,如果我在*.hs文件中尝试它
mypred :: Int -> Int
mypred (n+1) = n
Run Code Online (Sandbox Code Playgroud)
编译器给出了类似的抱怨:
/Users/pohl/Code/praxis-haskell/helloworld.hs:14:9:
Parse error in pattern: n + 1
Run Code Online (Sandbox Code Playgroud)
我不明白如何使用n + k模式?
是否有任何工具或方法可用于在两个不同数据源之间通过人名进行匹配?
系统没有其他常见信息,并且在许多情况下输入的名称也不同.
非完全匹配的示例:
小王,马丁路德=国王,马丁(不包括后缀)
欧文,J.博士=欧文,J.(不包括前缀)
奥巴马,巴拉克侯赛因=奥巴马,巴拉克(不包括中间名)
Pufnstuf,HR = Pufnstuf,Haibane Renmei (匹配缩写)
Tankengine,Thomas = Tankengine,Tom(匹配常见的昵称)
Flair,Rick"the Natureboy"= Flair,Natureboy(匹配昵称)
在scala.util.matching.Regex trait MatchData中我看到支持组名,我认为这与(Regex Named Capturing Groups)有关
但是由于Java在版本7之前不支持组名,因为我理解它(参考),Scala版本2.8.0(Java HotSpot(TM)64位服务器VM,Java 1.6.)给了我这个例外:
scala> val pattern = """(?<login>\w+) (?<id>\d+)""".r
java.util.regex.PatternSyntaxException: Look-behind group does not have an obvio
us maximum length near index 11
(?<login>\w+) (?<id>\d+)
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.group0(Pattern.java:2488)
at java.util.regex.Pattern.sequence(Pattern.java:1806)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
Run Code Online (Sandbox Code Playgroud)
所以问题是Scala支持的命名捕获组?如果是这样的话有什么例子吗?
我正在尝试匹配中间有空格的字符串和字母数字字符,如下所示:
test = django cms
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下模式进行匹配:
patter = '\s'
Run Code Online (Sandbox Code Playgroud)
遗憾的是,它只匹配空格,所以当在re对象中使用搜索方法找到匹配时,它只返回空格,而不是整个字符串,如何更改模式以便在找到匹配时返回整个字符串?
我有一个我要表达的声明,在C伪代码中看起来像这样:
switch(foo):
case(1)
if(x > y) {
if (z == true)
doSomething()
}
else {
doSomethingElse()
}
return doSomethingElseEntirely()
case(2)
essentially more of the same
Run Code Online (Sandbox Code Playgroud)
使用scala模式匹配语法是一种很好的方法吗?
我可以直接匹配一个生锈的字符串,正如我们在这个例子中看到的那样.
let a = "hello".to_string();
match &a[..] {
"hello" => {
println!("Matches hello");
}
_ => panic!(),
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个选项类型,它会失败.
match Some(a) {
Some("hello") => {
println!("Matches some hello");
}
_ => panic!(),
}
Run Code Online (Sandbox Code Playgroud)
因为类型不匹配.
error[E0308]: mismatched types
--> src/main.rs:5:14
|
5 | Some("hello") => {
| ^^^^^^^ expected struct `std::string::String`, found reference
|
= note: expected type `std::string::String`
found type `&'static str`
Run Code Online (Sandbox Code Playgroud)
我无法做到这一点,String因为我们有一个[..].到目前为止,我提出的最好的是:
match Some(a) {
Some(b) => match (&b[..]) {
"hello" => {
println!("Matches some, …Run Code Online (Sandbox Code Playgroud)