gpt4 book ai didi

haskell - 案例中的模式匹配,Haskell

转载 作者:行者123 更新时间:2023-12-05 09:25:15 31 4
gpt4 key购买 nike

我是 Haskell 的新手,对模式匹配有疑问。这是代码的高度简化版本:

data Value = MyBool Bool | MyInt Integer

codeDuplicate1 :: Value -> Value -> IO Value
codeDuplicate1 = generalFunction True

codeDuplicate2 :: Value -> Value -> IO Value
codeDuplicate2 = generalFunction False

generalFunction :: Bool -> Value -> Value -> IO Value
generalFunction b x1 x2 = do result <- eval x1
case result of
MyBool b -> do putStrLn $ show b
return (MyBool b)
_ -> eval x2

eval :: Value -> IO Value
eval (MyInt x) | x > 10 = return (MyInt 10)
| x > 5 = return (MyBool True)
| otherwise = return (MyBool False)

现在,我意识到 generalFunction 中的参数 b 与 case 部分中的 b 不同,因此,无论输入如何,这段代码都会打印 b。我使用相同的名称只是为了表明我的意图。所以我的问题是:

有没有办法将第一个 b 与第二个 b 匹配,这样如果 bs 相同就打印,否则计算 x2?而且,如果没有,是否还有另一种获得预期结果的好方法?

我几乎在this question中找到了答案,但我认为这种情况略有不同。

最佳答案

您可以使用保护模式。如果 MyBool 匹配 b == b2,将执行第一个选择;否则将执行第二个备选方案。

case result of
MyBool b2 | b == b2 -> do {print b; return $ MyBool b}
_ -> eval x2

关于haskell - 案例中的模式匹配,Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149302/

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