出于学习目的,我正在尝试编写自己的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)