gpt4 book ai didi

Haskell - 模式匹配重叠

转载 作者:行者123 更新时间:2023-12-04 10:05:22 25 4
gpt4 key购买 nike

test :: String -> String -> Int

test' x y n = n
test' "" (y:ys) n = error "error"
test' (x:xs) "" n = error "error"
test' (x:xs) (y:ys) n =
if x == y
then test' xs ys n
else test' xs ys (n+1)
test a b = test' a b 0

当我编译这个时,我得到这个输出:
Warning: Pattern match(es) are overlapped

答案总是“0”,这不是我想要的。代码有什么问题以及如何解决?

最佳答案

test' x y n = n将匹配每个调用,其他模式将不被考虑。我觉得这个case应该是test' "" "" n = n .如果您将原始行移至 ,则会得到相同的结果。结束 (当所有其他情况都失败时),但是你应该写test' _ _ n = n这表明你故意忽略了一些论点。

[编辑]

一个更短的解决方案是:

test a b | length a == length b = sum $ map fromEnum $ zipWith (/=) a b
| otherwise = error "error"
zipWith表达式生成 Bool 的列表这是 True对于每一个差异。函数 fromEnum map False0True1 .

关于Haskell - 模式匹配重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648958/

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