标签: pattern-matching

Haskell中的模式匹配Seq

模式匹配是最优雅的Haskell功能之一.

我最近在一个项目上工作,我需要一个队列数据结构,所以我正在使用Data.Sequence.然而,看起来我必须放弃模式匹配的优雅并诉诸守卫:

floodFillWorker :: Image -> RGBAColor -> Double -> PixelQueue -> Image
floodFillWorker image base tolerance queue 
    | Seq.null queue = image
    | otherwise      = doSomeWork image
Run Code Online (Sandbox Code Playgroud)

我可以使用模式匹配序列,还是需要使用警卫?

haskell pattern-matching

15
推荐指数
2
解决办法
1597
查看次数

用于替代ADT和模式匹配的Clojure?

每当在Haskell中我们需要一些变量数据类型时,我们会将ADT与模式匹配结合使用.Clojure人们对这些用例有什么用处?

haskell functional-programming clojure abstract-data-type pattern-matching

15
推荐指数
1
解决办法
2009
查看次数

我如何操纵解析树?

我一直在玩自然语言解析树并以各种方式操纵它们.我一直在使用斯坦福大学的Tregex和Tsurgeon工具,但代码很混乱,并不适合我的Python环境(这些工具是Java,不适合调整).我想要一个工具集,当我需要更多功能时,它可以轻松进行黑客攻击.还有其他工具非常适合在树上进行模式匹配,然后操纵那些匹配的分支吗?

例如,我想将以下树作为输入:

(ROOT
  (S
    (NP
      (NP (NNP Bank))
      (PP (IN of)
        (NP (NNP America))))
    (VP (VBD used)
      (S
        (VP (TO to)
          (VP (VB be)
            (VP (VBN called)
              (NP
                (NP (NNP Bank))
                (PP (IN of)
                  (NP (NNP Italy)))))))))))
Run Code Online (Sandbox Code Playgroud)

和(这是一个简化的例子):

  1. 找到标签为NP的任何节点,其中第一个孩子的标签为NP,一些后代名为"Bank",第二个孩子的标签为PP.
  2. 如果匹配,则获取PP节点的所有子节点并将它们移动到匹配的NP子节点的末尾.

例如,采取树的这一部分:

(NP
  (NP (NNP Bank))
  (PP (IN of)
    (NP (NNP America))))
Run Code Online (Sandbox Code Playgroud)

把它变成这个:

(NP
  (NP (NNP Bank) (IN of) (NP (NNP America))))
Run Code Online (Sandbox Code Playgroud)

由于我的输入树是S表达式,我考虑使用Lisp(嵌入到我的Python程序中)但是我已经写了很长时间,我在Lisp中编写了一些重要内容,我不知道从哪里开始.

什么是描述模式的好方法?什么是描述操纵的好方法?什么是思考这个问题的好方法?

lisp nlp pattern-matching stanford-nlp s-expression

15
推荐指数
3
解决办法
3540
查看次数

OCaml:模式匹配与If/else语句

所以,我对OCaml完全不熟悉,并且在实现我的第一个函数方面进展缓慢.我理解困难的一件事是何时使用模式匹配能力

let foo = 
[] -> true
| _  -> false;;
Run Code Online (Sandbox Code Playgroud)

vs使用if else结构

let foo a = 
if a = [] then true else false;;
Run Code Online (Sandbox Code Playgroud)

我什么时候应该使用?

ocaml functional-programming if-statement pattern-matching

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

如何从一组文件中删除与模式匹配的所有行?

我有一个恼人的闭源工具,它将特定信息写入其配置文件.如果您尝试在其他文件上使用配置,则会加载旧文件.哎呀...

幸运的是,配置文件是文本,因此我可以对它们进行版本控制,结果发现,如果只是从文件中删除了违规行,则不会造成任何损害.

但是该工具不断将线路放回去.所以每次我想检查配置文件的新版本时,我都必须删除包含该符号的所有行openDirFile.

我即将构建某种bash命令来在每个文件上运行grep -v,将结果存储在临时文件中,然后删除原始文件并重命名临时文件,但我想知道是否有人知道一个很好的清洁解决方案,或者已经编造并调试了类似的调用.

为了额外的功劳,如何在不破坏同一目录中的符号链接的情况下完成这项工作(favourite.rc-> signals.rc)?

bash grep sed pattern-matching

15
推荐指数
1
解决办法
8713
查看次数

将数据帧中的值与另一个数据帧中的值进行匹配,并将前者替换为另一个数据帧中的相应模式

复杂的标题,但这是我想要实现的一个简单的例子:

d <- data.frame(v1 = c(1,2,3,4,5,6,7,8), 
                v2 = c("A","E","C","B","B","C","A","E"))

m <- data.frame(v3 = c("D","E","A","C","D","B"), 
                v4 = c("d","e","a","c","d","b"))
Run Code Online (Sandbox Code Playgroud)

在价值d$v2应该由值来代替m$v4从值相匹配d$v2m$v3

生成的数据框d应如下所示:

v1    v4
1      a
2      e
3      c
4      b
5      b
6      c
7      a
8      e
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的东西,我最接近的是: d$v2 <- m$v4[which(m$v3 %in% d$v2)]

我试着再次避免任何for循环!必须是可能的:-)不知怎的......;)

replace r pattern-matching dataframe

15
推荐指数
3
解决办法
5万
查看次数

Scala模式与集合匹配

以下不起作用.

object Foo {
    def union(s: Set[Int], t: Set[Int]): Set[Int] = t match {
        case isEmpty => s
        case (x:xs)  => union(s + x, xs)
        case _       => throw new Error("bad input")
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:未找到:输入xs

如何在一组上进行模式匹配?

scala pattern-matching

15
推荐指数
3
解决办法
1万
查看次数

在Ocaml中记录类型模式匹配

我正在尝试使用模式匹配来编写计算器应用程序.

两种主要类型定义如下:

type key = Plus | Minus | Multi | Div | Equals | Digit of int;;

type state = {
    lcd: int; (* last computation done *)
    lka: key; (* last key actived *)
    loa: key; (* last operation actived *)
    vpr: int (* value print on the screen *)
};;

let print_state s =
    match s with
     state (a,_,_,d) -> print_int a; //Here has the compile error
                print_newline();
                print_int d;
                    print_newline();;
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个像这样的州:

let initial_state = { lcd=0; …
Run Code Online (Sandbox Code Playgroud)

ocaml types record pattern-matching

15
推荐指数
1
解决办法
9388
查看次数

PostgreSQL LIKE子句中的正则表达式

我坚持使用一个简单的正则表达式.不知道我错过了什么.在正则表达式技能上有点生疏.

我想要匹配的表达是:

select * from table where value like '00[1-9]%'
-- (third character should not be 0)
Run Code Online (Sandbox Code Playgroud)

所以这应该匹配'0090D0DF143A'(格式:文本),但它不是!

regex sql postgresql pattern-matching

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

如何在elixir中的函数头中的地图键上进行模式匹配

我似乎找不到在函数头中的地图键上进行模式匹配的方法.有没有办法做到这一点?我正在尝试做的是根据某个键是否已存在于地图中而运行不同的代码(并且还想避免if/else等)

这就是我的代码

def my_func(key, %{key => _} = map), do: ...
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误

**(CompileError)在映射键匹配内非法使用变量键,映射只能使用^键匹配现有变量

当然我也试过用它 ^

def my_func(key, %{^key => _} = map), do: ...
Run Code Online (Sandbox Code Playgroud)

然后给出

**(CompileError)未绑定变量^键

我在Windows 8.1机器上使用elixir 1.3.1/erlang 19.0 x64.谢谢阅读!

elixir pattern-matching

15
推荐指数
1
解决办法
8089
查看次数