Haskell自定义运算符模式匹配实现报错:问题排查求助
Haskell自定义运算符语法错误修正
你的代码报错的核心原因是运算符以前缀形式使用时未添加括号。Haskell语法明确规定:自定义运算符若要作为前缀函数出现在等式左侧,必须用括号包裹;如果采用中缀形式,则直接将运算符放在两个参数中间即可。
正确写法一(前缀形式)
(+|+) :: [a] -> [a] -> [a] (+|+) [] [] = [] (+|+) (x : _) [] = [x] (+|+) [] (y : _) = [y] (+|+) (x : _) (y : _) = [x, y]
正确写法二(中缀形式)
(+|+) :: [a] -> [a] -> [a] [] +|+ [] = [] (x : _) +|+ [] = [x] [] +|+ (y : _) = [y] (x : _) +|+ (y : _) = [x, y]
边界情况验证
- 双空列表:
[] +|+ []→ 返回[] - 单非空列表:
[1,2] +|+ []→ 返回[1];[] +|+ ["a","b"]→ 返回["a"] - 双非空列表:
[1] +|+ [2,3]→ 返回[1,2]
内容的提问来源于stack exchange,提问作者coderodde
相关产品推荐
相关产品推荐

