小编Jab*_*lad的帖子

与通配符匹配模式时的'多次声明'错误

出于学习目的,我正在尝试编写自己的zipWith函数实现.但是,我遇到了边缘情况下的模式匹配问题_.首先,我将描述好的情况,然后是坏的情况.希望有人能够解释他们为什么表现不同.谢谢

如果我zipWith按如下方式编写函数,它就可以工作(注意第2行和第3行匹配空列表的边缘情况的顺序): -

zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
zipwith' _ [] _ = []
zipWith' _ _ [] = []
zipWith' f (x:xs) (y:ys) = f x y : zipWith' f xs ys
Run Code Online (Sandbox Code Playgroud)

编制GHCI: -

ghci> :l ZipWith.hs 
[1 of 1] Compiling Main             ( ZipWith.hs, interpreted )
Run Code Online (Sandbox Code Playgroud)

好的,上面的情况很好,但是如果我为GHCI周围的边缘情况交换模式匹配会引发第2行和第4行的"多次声明错误".

zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith' _ _ [] = …
Run Code Online (Sandbox Code Playgroud)

haskell wildcard pattern-matching

10
推荐指数
1
解决办法
2900
查看次数

标签 统计

haskell ×1

pattern-matching ×1

wildcard ×1