gpt4 book ai didi

Haskell - 模式中守卫右侧使用通配符

转载 作者:行者123 更新时间:2023-12-02 14:17:02 25 4
gpt4 key购买 nike

假设我有一段这样的代码:

test pattern
| pattern == (_,NOT (WIRE _)) = 1
| pattern == (_,AND (WIRE _) (WIRE _)) = 2
| otherwise = 0

我试图将它与几种可能性之一相匹配,有些与一种(WIRE“”),有些与两种。我的实际输入如下,例如:(“p”,NOT(WIRE“x”))。我想要一个可以接受任何字母作为输入的模式(我所希望的_)并且失败得很惨(非法_)。在 haskell 中可以做到这一点吗?

最佳答案

好的,编辑后这更有意义。

==比较,但是 _是一个模式。模式仅出现在以下语法上下文中:

  • 在(模式)绑定(bind)的左侧,即“= 之前的内容”,位于顶层或 where 中 block 或 let表达式或命令(以 do 表示法);
  • <- 的左侧在do符号或列表理解;
  • -> 的左侧在 case表达;
  • 作为函数的形式参数,可以在函数绑定(bind)或 lambda ( \ ) 表达式中。

(我希望我没有忘记!)在你的情况下,你只需编写即可实现你想要的

test (_, NOT (WIRE _)) = 1
test (_, AND (WIRE _) (WIRE _)) = 2
test _ = 0
<小时/>

您可能会问“pattern == (_, NOT (WIRE _)) ”的正确版本是什么。好吧,你可以这样写:

case pattern of
(_, NOT (WIRE _)) -> True
_ -> False

关于Haskell - 模式中守卫右侧使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3801036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com