有可能以某种方式连接这个:
my $ pattern1 = qr/^/;
Run Code Online (Sandbox Code Playgroud)
有了这个:
my $ pattern2 = qr/ABC/
Run Code Online (Sandbox Code Playgroud)
所以我得到(这个值)?
qr/^ABC/
Run Code Online (Sandbox Code Playgroud)
语法可能不同,我只是想实现这个结果.
以下代码有效:
data MyList a = Atom a | Cons a (MyList a) deriving (Show)
getAtom (Atom a) = a
myFindMax :: (Ord a) => MyList a -> a
myFindMax (Cons x xs) = let restMax = myFindMax xs in
if x > restMax then x else restMax
myFindMax x = getAtom x
Run Code Online (Sandbox Code Playgroud)
但是当我写作
myFindMax (Atom x) = getAtom x
Run Code Online (Sandbox Code Playgroud)
在其他模式之前,我得到了错误
Couldn't match expected type ‘MyList a’ with actual type ‘a’
‘a’ is a rigid type variable bound by
the type …Run Code Online (Sandbox Code Playgroud) 我有一组像
data <- c("ABS Spring Meeting 5.14.15", "DEFG Sellors Tour 10.28.14", "DDCC Fun at the Museum 4.4.15", "GAME CS vs. Washington 11.01.14", "BSS Studio 54 5.13.15","Pas-12 3.5.15")
Run Code Online (Sandbox Code Playgroud)
您可以注意到,最后一组数字是事件日期.我想把它们转换成日期
date <- c("2015-05-14","2014-10-28","2015-04-04","2014-11-01","2015-05-13","2015-03-05")
Run Code Online (Sandbox Code Playgroud)
感觉我必须将这种类型("5.14.15","10.28.14","4.4.15","11.01.14","5.13.15","3.5.15")子串到子模式,然后做转换日期.
谁能帮我这个?谢谢!
所以我有一堆采用这种格式的案例类:
case class A(value: String)
case class B(value: String)
case class C(value: String)
Run Code Online (Sandbox Code Playgroud)
我在函数中接受了几个Option [String]值作为参数,如果参数中的值不是None,我想创建Option [A],Option [B].
我现在这样做:
val first = parameterOptional match {
case Some(theStringValue) => Some(A))
case None => None
}
Run Code Online (Sandbox Code Playgroud)
它有效,但我想知道是否有更简洁的方法来做到这一点,我对Scala很新.
示例中的变量名称显然已被更改.
谢谢
考虑以下递归函数:
def example (param: List[Int]): Int = {
case Nil => 0
case x :: xs => example(xs)
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
type mismatch;
[error] found : List[Any]
[error] required: List[Int]
Run Code Online (Sandbox Code Playgroud)
从参数声明中可以清楚地看出,分解的结果将是a Int和a List[Int],但显然编译器并不这么认为.我怎样才能做到这一点?
我有很多字符串; 它们基本上是文件名.格式如下:
["abcdedf_023.txt",
"foeoioo_011.txt",
"sdjskdsjd_3131.txt",
"dsdsdsrer_044.txt",
"rgfbfgrt_12.txt"]
Run Code Online (Sandbox Code Playgroud)
等等.
我需要的是过滤掉包含大于15末尾的数字的名称.因此,通过上述输入,所需的输出将是:
["abcdedf_023.txt",
"sdjskdsjd_3131.txt",
"dsdsdsrer_044.txt"]
Run Code Online (Sandbox Code Playgroud)
该数字(15)不是固定的,并且由用户提供作为输入.
创建一个带有两个参数的函数,一个整数和一个五元素的整数元组,如果元组的任何三个元素的总和大于第一个参数,则返回true,否则返回false.
let func el tupl =
match tupl with
|(a,b,c,d,e) when (a+b+c) > el || (a+d+e) > el || (b+c+d)> el || (b+c+e) > el -> true
| _-> false
Run Code Online (Sandbox Code Playgroud) 我编写了一个函数,它将比较两个列表并检查第一个是否是第二个的前缀,并且必须使用递归完成.
例如:
prefix [1,2] [1,2,3]
>True
prefix [2,1,4] [2,1,13,4]
>False
Run Code Online (Sandbox Code Playgroud)
现在我已经做到了这一点,但我觉得它效率低下:
prefix :: [Int] -> [Int] -> Bool
prefix (x:xs) (y:ys)
| null xs = True
| x == y && head xs == head ys = True && prefix xs ys
| head xs /= head ys = False
Run Code Online (Sandbox Code Playgroud)
我希望它可以更有效地完成,并有一些更好的模式匹配.是真的吗?
好的,所以我正在学习Haskell的基础知识,最近我做了一个模拟考试,其中一个问题是使用模式匹配和通配符作为函数的一部分来生成不同的结果.创建的函数如下:
fun x _ = 1
fun _ 0 = 2
fun x y = 3
Run Code Online (Sandbox Code Playgroud)
现在的问题是添加乐趣0 0 + fun 1 0这两者显然都匹配生成1的模式.
但是我看不出它是如何工作的,就像我看到的那样,任何输入值都可以使用它们中的任何一种模式.
我很可能看错了,所以任何人都可以通过这个问题跟我说话,为什么乐趣0 0和乐趣1都生成1?当加在一起时,当然会给出结果2.
首先考虑以下代码,它计算字符串中的空格数:
countSpaces :: String -> Int
countSpaces [] = 0
countSpaces (c : restOfString)
= d + countSpaces restOfString
where d = if c == ’ ’ then 1
else 0
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
1,如果我拨打电话:countSpaces "abc",那么当这个函数试图匹配字符串会发生什么"abc"用(c: restOfString).我的意思restOfString是:"abc"在这次通话中,但是这是(c:restOfString)什么?你正在"勉强"某事(变量?c)restOfstring 然后你想要匹配?我只是不明白.
2,我尝试运行代码但是我得到一个解析错误为什么?
输入'''上的解析错误
3,这个函数会调用countSpaces 无穷大吗?因为restOfString总是相同而不是减少,例如.countSpaces "aaa"第一次通话,第二次或任何通话后拨打电话都不会改变,对吧?
现在考虑完成相同任务的代码:
countSpaces :: String -> Int
countSpaces [] = 0
countSpaces (’ ’ : restOfString)
= 1 + …Run Code Online (Sandbox Code Playgroud)