标签: pattern-matching

f#模式与类型匹配

我正在尝试以递归方式打印出所有对象属性和子类型属性等.我的对象模型如下...

type suggestedFooWidget = {
    value: float ; 
    hasIncreasedSinceLastPeriod: bool ;
}

type firmIdentifier = {
    firmId: int ;
    firmName: string ;
}
type authorIdentifier = {
    authorId: int ;
    authorName: string ;
    firm: firmIdentifier ;
}

type denormalizedSuggestedFooWidgets = {
    id: int ; 
    ticker: string ;
    direction: string ;
    author: authorIdentifier ;
    totalAbsoluteWidget: suggestedFooWidget ;
    totalSectorWidget: suggestedFooWidget ;
    totalExchangeWidget: suggestedFooWidget ;
    todaysAbsoluteWidget: suggestedFooWidget ;
    msdAbsoluteWidget: suggestedFooWidget ;
    msdSectorWidget: suggestedFooWidget ;
    msdExchangeWidget: suggestedFooWidget ;
}
Run Code Online (Sandbox Code Playgroud)

我的递归基于以下模式匹配...

let rec printObj (o …
Run Code Online (Sandbox Code Playgroud)

f# types pattern-matching

12
推荐指数
2
解决办法
2万
查看次数

Haskell/GHC - 是否有"警告不完整模式"的中缀标签/编译指示

我正在寻找一个可以警告特定不完整模式的pragma.它会使编译器失败,并带有以下(假设的)代码:

{-# FAILIF incomplete-patterns #-}
f :: Int -> Int
f 0 = 0
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Arrows编写"编译器",并且知道模式匹配已完成将有助于隔离错误.谢谢!

haskell pattern-matching ghc

12
推荐指数
1
解决办法
819
查看次数

Python模式匹配.匹配'c [任意数量的连续a,b,或c或b,c或a等] t'

抱歉标题,我无法想出一个干净的方式来问我的问题.

在Python中我想匹配一个表达式'c [some stuff] t',其中[some stuff]可以是任意数量的连续a,b或c并且以任何顺序.

例如,这些工作: 'ct','cat','cbbt','caaabbct','cbbccaat'

但这些不是: 'cbcbbaat','caaccbabbt'

编辑:a,b和c只是一个例子,但我真的希望能够将它扩展到更多的字母.我对正则表达式和非正则表达式解决方案感兴趣.

python regex pattern-matching

12
推荐指数
2
解决办法
700
查看次数

notepad ++ Inverse Regex替换(除字符串外)

我基本上希望匹配包含此字符串"Hello"的每一行

例:

sdfsdoifdoskf
fdgokfdghodfkg
hello
fdojgohdfgjkdfg
gfobjobhkdfokgdfg
dofjkdsf hello dfgkdfogdfg
xcvmxhckvmxck
fogkdfhokg
hello
Run Code Online (Sandbox Code Playgroud)

我尝试了这个正则表达式模式: ^((?!hello).)*$

找不到匹配项.

基本上我想使用notepad ++ 删除包含字符串"hello"的每一行

regex notepad++ inverse pattern-matching

12
推荐指数
1
解决办法
2万
查看次数

匹配在传染媒介的铁锈样式

教程展示了一些非常基本的模式匹配示例,例如匹配整数以模拟c风格的switch语句.本教程还演示了如何对元组类型和解构结构进行基本的解构.

看起来应该可以在矢量上进行模式匹配,但是我无法找到它的正确语法,我还没有找到它的任何例子.

例如,在Haskell中,您可以轻松地对列表进行构造:

foldr :: (a -> b -> b) -> b -> [a] -> b
foldr func initValue []     = initValue
foldr func initValue (x:xs) = func initValue $ foldr initValue func xs
Run Code Online (Sandbox Code Playgroud)

所以,看一个粗略的翻译,能够这样做会很高兴:

fn foldr<A, B>(func: fn(A, B) -> B,
               initValue: B,
               vals: [A]) -> B {
  alt vals {
    [] { ret initValue; }
    _  {
      let h = vec::head(vals),
          t = vec::tail(vals);
      ret foldr(func, func(initValue, h), t);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:我知道你可以在这里使用if语句,我只是将它作为矢量模式匹配的一个例子.

目前返回:

patterns.rs:10:4: 10:5 …
Run Code Online (Sandbox Code Playgroud)

vector pattern-matching rust rust-obsolete

12
推荐指数
2
解决办法
7370
查看次数

匹配Notepad ++中不包含单词的行

我试图匹配下面的行不输入NOT包含"VelSign"(使用Notepad ++):

#MARKER VelSign 457.45 50 kmh

#MARKER IsBridge是真的

#MARKER TrafficSign 45

#MARKER TrafficLight 45 445 444 40

我使用以下正则表达式: ^#MARKER (?!.*VelSign).*$

似乎没有用.我究竟做错了什么?

regex notepad++ pattern-matching

12
推荐指数
2
解决办法
4万
查看次数

在Haskell中使用参数作为模式

是否有可能创建一个泛型函数,将Foo或Bar作为参数,并返回一个在模式匹配中使用该参数的函数?

例如,如果我有

isFoo :: SomeData -> Bool
isFoo (Foo _) = True
isFoo _       = False

isBar :: SomeData -> Bool
isBar (Bar _) = True
isBar _       = False
Run Code Online (Sandbox Code Playgroud)

有没有办法创建一个通用函数,如

checkType :: SomeClass -> SomeData -> Bool
checkType (SomeClass _) = True
checkType _ = False
Run Code Online (Sandbox Code Playgroud)

我意识到情况看起来有点奇怪,实际的用例有点复杂,但问题是相同的.


我正在尝试重构的实际代码如下

isString :: [LispVal] -> ThrowsError LispVal
isString [(String _)] = return $ Bool True
isString ((String _):xs) = isString xs >>= unpackBool >>= return . Bool
isString _ = return $ …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching

12
推荐指数
1
解决办法
1257
查看次数

Elixir:模式匹配对于元组和映射的工作方式不同

在Elixir中,如果我尝试模式匹配以下两个元组:

{a} = {1, 2}
Run Code Online (Sandbox Code Playgroud)

我得到一个匹配错误.但如果我对两张地图做同样的事情:

%{x: a} = %{x: 1, y: 2}
Run Code Online (Sandbox Code Playgroud)

它工作正常,并a绑定到1.我可以看到为什么匹配这两个元组给出了一个错误,但为什么匹配地图不会出错?

dictionary tuples elixir pattern-matching

12
推荐指数
2
解决办法
1万
查看次数

如何在保护条款中使用'in'运算符?

我想在Elixir写一个字谜检查器.它需要2个单词,第一个是参考,第二个是作为第一个可能的anagram测试.

我试图用递归和模式匹配来编写它.我in在一个保护条款中使用运算符时收到错误:

(ArgumentError)运算符输入无效的args,它在保护表达式中使用时需要右侧的编译时列表或范围

我不知道该怎么做才能解决它.这是代码(错误在第4个定义中):

defmodule MyAnagram do
  def anagram?([], []), do: true

  def anagram?([], word) do
    IO.puts 'Not an anagram, the reference word does not contain enough letters'
    false
  end

  def anagram?(reference, []) do
    IO.puts 'Not an anagram, some letters remain in the reference word'
    false
  end

  def anagram?(reference, [head | tail]) when head in reference do
    anagram?(reference - head, tail)
  end

  def anagram?(_, [head | _]) do
    IO.puts 'Not an anagram, #{head} is not in the reference …
Run Code Online (Sandbox Code Playgroud)

elixir pattern-matching anagram

12
推荐指数
1
解决办法
4303
查看次数

组合使用null-checks和Pattern Matches的'if'语句时出错

以下按预期工作:

dynamic foo = GetFoo();

if (foo != null)
{
    if (foo is Foo i)
    {
        Console.WriteLine(i.Bar);
    }
}
Run Code Online (Sandbox Code Playgroud)

但如果我像这样结合if语句:

if (foo != null && foo is Foo i)
{
    Console.WriteLine(i.Bar);
}
Run Code Online (Sandbox Code Playgroud)

然后我收到编译器警告

Use of unassigned local variable 'i'

谁能解释为什么会这样?

c# pattern-matching

12
推荐指数
1
解决办法
194
查看次数