假设我有一段这样的代码:
test pattern
| pattern == (_,NOT (WIRE _)) = 1
| pattern == (_,AND (WIRE _) (WIRE _)) = 2
| otherwise = 0
我试图将其与几种可能性中的一种相匹配,其中一些与一种(WIRE“”),一些与两种。我有如下实际输入,例如:(“p”,NOT(WIRE“x”))。我希望有一个模式可以接受任何字母作为输入(我希望与_一起)并且我失败了(非法_)。是否可以在haskell中执行此操作?
答案 0 :(得分:7)
好的,这在编辑后更有意义。
==
比较值,但_
是模式。模式仅出现在以下语法上下文中:
=
之前的内容”,顶层或where
块或let
表达式或命令(位于{ {1}}符号); do
符号或列表理解中的<-
左侧; do
表达式中的->
左侧; case
)表达式中。(我希望我没有忘记任何!)在你的情况下,你可以通过简单的写作实现你想要的东西
\
您可能会问“test (_, NOT (WIRE _)) = 1
test (_, AND (WIRE _) (WIRE _)) = 2
test _ = 0
”的正确版本是什么。好吧,你可以写:
pattern == (_, NOT (WIRE _))
答案 1 :(得分:0)
为什么你需要警卫呢?我错过了什么吗?下面是我认为你正在寻找的合法的Haskell代码。
test (_,NOT (WIRE _)) = 1
test (_,AND (WIRE _) (WIRE _)) = 2
test _ = 0