我正在编写一个函数,将bool列表的列表无意义地映射到bool列表中.这是我的代码:
y=[False| y<-[0..]]
encode :: [[Bool]] -> [Bool]
encode x:xs = (zip1 x y):True:True:(encode xs)
encode []=[]
Run Code Online (Sandbox Code Playgroud)
zip1函数只需要两个列表并将它们交替写入新列表.
我收到错误消息
模式中的解析错误:编码
为什么我收到此错误消息?
我有以下匹配条件,测试输入的猜测是否是有效数字(来自铁锈猜谜游戏练习):
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("Failed to read");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
Run Code Online (Sandbox Code Playgroud)
如何扩展匹配以检查数字是否为负数或0(我想在这种情况下抛出错误)并在数字为正数时正常进行?
我尝试在Ok case中的num上添加一个if,但是会抛出一个错误(可能是因为num绑定到guess的值)并且似乎也不是惯用的.
因此,我使用此正则表达式来验证我为实习设计的网站上的一些文本框。
问题在于我不太热衷于正则表达式,而且我即将找到一个能匹配0-24至不超过两个小数位的数字的有效表达式。
到目前为止,这就是我所拥有的。该模式也匹配任何字符串。例如"a"或"az"。
var pattern = "^([0-9]{0,2}?.?[0-9]{0,2}|1[0-9].?[0-9]{0,2}|2[0-4].?[0-9]{0,2})$";
Run Code Online (Sandbox Code Playgroud) 我正在努力想出一个用逗号分隔的整数列表的正则表达式,范围在1-9999之间.
这是我到目前为止:
"(^[1-9][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[1-9](,[1-9][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[1-9])*)$"
Run Code Online (Sandbox Code Playgroud)
我不想允许空格,不应该以逗号结尾,所以应该只允许:
1,2,9999
1
43,5
Run Code Online (Sandbox Code Playgroud) 问题出在标题:)
我的代码:
data tree a = Leaf a | Node (tree a) (tree a)
treeo = Node((Node(Leaf 1)(Node (Leaf 10)(Leaf 11))))
(Node(Leaf 12)(Leaf 13))
-- count all leafs:
lcounter(Leaf a) = 1
lcounter(Node a b)= lcounter a + lcounter b
-- count all nodes?:
Run Code Online (Sandbox Code Playgroud) 只是在这里与Haskell挣扎......我的术语非常糟糕,鉴于我的母语不是英语,进行正确的搜索有点复杂:P我正在关注一些haskell教程/书籍(了解你一个Haskell,Real World Haskell,Happy Learn Haskell,也是一个邮件列表,以及一些随机页面),现在我已经停在这里:
head' :: [Char] -> Char
head' (x:_) = x
Run Code Online (Sandbox Code Playgroud)
此函数接收String类型的元素列表,如果我像这样应用它:
head' "hello"
Run Code Online (Sandbox Code Playgroud)
它返回"h",它与x有界,"ello"与_有界,但无关紧要,因为我不使用它.我明白(:)函数(或用作中缀运算符)接收一个元素,它将被放入并且新列表的开始,其尾部将是另一个接收元素:
'a' : ['b', 'c']将返回"abc"但是,为什么当我在括号内使用":",第一个元素是x,其余的是_?这里发生了什么?
我读了几个像这样的问题(x:xs)模式Haskell逻辑和这个(我更接近回答我的问题)(x:_)和[x:_]是什么意思?但是最后一个接受的问题是:":是列表的构造函数,它将新列表的头部作为左边的参数,尾部作为右边的参数.如果你将它用作这里的模式,那意味着你匹配的列表的头部是正确的模式,左边是尾部. "
"列表的头部是右边的,尾部是左边的"......它真的让我感到困惑:如果头部被赋予"_"而尾部被赋予"x",当模式使用":"时匹配,为什么x具有列表头的值?
我想也许是我糟糕的英语水平让我很难掌握这个哈哈.我也会欣赏一些提示(如特定搜索)而不是直接回答:)
谢谢 :)
编辑:对于像我这样的另一个菜鸟....正如接受的答案所说,"abcd"只是'a':'b':'c':'d',模式(x:_)匹配'a' :'b'等等,下划线表示"我不关心其余部分",并接收其余的字符.只是 :)
在从Haskell书中记笔记时,这个代码示例应该返回:Left [NameEmpty, AgeTooLow],但它只返回第一个案例Left [NameEmpty].然后,当我传递mkPerson2它应该返回的函数结果时Right Person _ _,我得到了一个"非详尽模式``错误.我已经查看了这段代码很长一段时间了,但它对我来说是正确的.我在这里错过了什么?关于这个问题的任何解释都将非常感谢,谢谢!
module EqCaseGuard where
type Name = String
type Age = Integer
type ValidatePerson a = Either [PersonInvalid] a
data Person = Person Name Age deriving Show
data PersonInvalid = NameEmpty
| AgeTooLow
deriving Eq
ageOkay :: Age -> Either [PersonInvalid] Age
ageOkay age = case age >= 0 of
True -> Right age
False -> Left [AgeTooLow]
nameOkay :: Name -> Either …Run Code Online (Sandbox Code Playgroud) 我正在尝试一些特定的构建器模式.请不要介意这里的设计 - 这是一个试用版.
我有一个Renderer产生方法的类型set_shape.给调用的参数类型应该实现空特征IsRenderable.然后,方法的登录应该在结构类型之间有所不同,Rectangle并且Circle两者都实现了IsRenderable特征.不要为返回类型而烦恼.
#[derive(Clone, Copy)]
pub struct Rectangle {
pub origin: Point,
pub height: usize,
pub width: usize,
}
trait IsRenderable {}
impl IsRenderBuilder for Rectangle {}
impl<'a> Renderer<'a> {
// logic that needs lifetime 'a
pub fn set_shape<T: IsRenderable>(shape: T) -> Box<IsRenderBuilder> {
match shape {
_ => panic!("WTF!"),
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情. PSEUDO:
match shape {
Rectangle => return RectangleShapeBuilder,
Circle => return CircleShapeBuilder, …Run Code Online (Sandbox Code Playgroud) 例:
搜索:
/lastword\s*\n\zs\(\s*\n\)\{6}\ze\s*startword
Run Code Online (Sandbox Code Playgroud)
此搜索在以"lastword"结尾的行和以"startword"开头的行之间搜索6个空行
我想抓住与此搜索匹配的空行的亚麻布.
有没有办法在vim中这样做?
type Occurrences = List[(Char, Int)]
val lard = List(('a', 1), ('d', 1), ('l', 1), ('r', 1))
val r = List(('r', 1))
def subtract2(x: Occurrences, y: Occurrences): Occurrences =
x.foldLeft(List[(Char, Int)]())({case (acc, list) if(!(y.contains(list))) => acc.::(list)})
subtract2(lard, r)
Run Code Online (Sandbox Code Playgroud)
抛出
scala.MatchError: (List(),(a,1)) (of class scala.Tuple2)
at forcomp.A$A183$A$A183$$anonfun$subtract2$1.apply(temp.sc:11)
at forcomp.A$A183$A$A183$$anonfun$subtract2$1.apply(temp.sc:11)
at scala.collection.LinearSeqOptimized$class.foldLeft(temp.sc:120)
at scala.collection.immutable.List.foldLeft(temp.sc:80)
at forcomp.A$A183$A$A183.subtract2(temp.sc:11)
at #worksheet#.#worksheet#(temp.sc:14)
Run Code Online (Sandbox Code Playgroud)
这个错误的原因是什么?我想,所有问题都有缺点,但更确切地说我不知道
pattern-matching ×10
haskell ×4
regex ×2
rust ×2
javascript ×1
lines ×1
match ×1
parse-error ×1
scala ×1
search ×1
string ×1
traits ×1
vim ×1