标签: pattern-matching

Haskell中模式匹配的错误

我正在编写一个函数,将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函数只需要两个列表并将它们交替写入新列表.

我收到错误消息

模式中的解析错误:编码

为什么我收到此错误消息?

haskell pattern-matching parse-error

0
推荐指数
1
解决办法
43
查看次数

数字条件下的锈匹配

我有以下匹配条件,测试输入的猜测是否是有效数字(来自铁锈猜谜游戏练习):

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的值)并且似乎也不是惯用的.

pattern-matching rust

0
推荐指数
1
解决办法
1629
查看次数

正则表达式:帮助匹配小于24的数字

因此,我使用此正则表达式来验证我为实习设计的网站上的一些文本框。

问题在于我不太热衷于正则表达式,而且我即将找到一个能匹配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)

javascript regex pattern-matching

0
推荐指数
1
解决办法
784
查看次数

逗号分隔1-9999正则表达式之间的整数

我正在努力想出一个用逗号分隔的整数列表的正则表达式,范围在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)

regex string pattern-matching

0
推荐指数
1
解决办法
457
查看次数

Haskell,如何计算树的所有节点(模式匹配)

问题出在标题:)

我的代码:

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 pattern-matching

0
推荐指数
1
解决办法
1928
查看次数

Haskell:模式匹配(x:_):为什么列表头限于x?

只是在这里与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 pattern-matching

0
推荐指数
1
解决办法
629
查看次数

这些模式对我来说看起来很详尽,"非详尽模式错误"?为什么?

问题

在从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)

haskell functional-programming pattern-matching

0
推荐指数
1
解决办法
120
查看次数

匹配实现特征的类型,从而返回它

我正在尝试一些特定的构建器模式.请不要介意这里的设计 - 这是一个试用版.

我有一个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)

traits pattern-matching rust

0
推荐指数
1
解决办法
60
查看次数

捕获与搜索匹配的行数

例:

搜索:

/lastword\s*\n\zs\(\s*\n\)\{6}\ze\s*startword
Run Code Online (Sandbox Code Playgroud)

此搜索在以"lastword"结尾的行和以"startword"开头的行之间搜索6个空行

我想抓住与此搜索匹配的空行的亚麻布.

有没有办法在vim中这样做?

vim search lines pattern-matching match

0
推荐指数
1
解决办法
190
查看次数

match.error的原因是什么?

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)

这个错误的原因是什么?我想,所有问题都有缺点,但更确切地说我不知道

scala pattern-matching

0
推荐指数
1
解决办法
1370
查看次数