Haskell - 函数中的非详尽模式问题
Haskell - Problem with non-exhaustive patterns in function
我有以下 haskell 代码:
为什么 x1 的模式不匹配函数 f?
按原样阅读非常困难。让我们使用一些有创意的空白来排列东西。
f ( [_ ]:[(x,[xs ])]:[y ,ys ] :[]) = 1
x1 = [[(1,[1,2])],[(1,[1,2])],[(1,[1,2]),(1,[1,2])],[]]
好的。所以实际上有一些不同的事情并没有像您预期的那样进行!
[xs]
不匹配 [1, 2]
,因为 [xs]
是单元素列表而 [1, 2]
是双元素列表(可能的修复:xs
而不是 [xs]
)
[y, ys]
恰好匹配,但我 怀疑 不符合您的预期:y
匹配列表的第一个元素,就像我想你打算,但是 ys 到列表的第二个 element,而不是我认为你打算的列表的其余部分(可能的修复:(y:ys)
而不是 [y, ys]
)
- 您的模式的
:[]
匹配列表定义的右括号,而不是最终的 []
元素(可能的修复::[]:[]
而不是 :[]
;第一个 []
匹配元素,第二个 []
匹配列表结束标记)
我有以下 haskell 代码:
为什么 x1 的模式不匹配函数 f?
按原样阅读非常困难。让我们使用一些有创意的空白来排列东西。
f ( [_ ]:[(x,[xs ])]:[y ,ys ] :[]) = 1
x1 = [[(1,[1,2])],[(1,[1,2])],[(1,[1,2]),(1,[1,2])],[]]
好的。所以实际上有一些不同的事情并没有像您预期的那样进行!
[xs]
不匹配[1, 2]
,因为[xs]
是单元素列表而[1, 2]
是双元素列表(可能的修复:xs
而不是[xs]
)[y, ys]
恰好匹配,但我 怀疑 不符合您的预期:y
匹配列表的第一个元素,就像我想你打算,但是 ys 到列表的第二个 element,而不是我认为你打算的列表的其余部分(可能的修复:(y:ys)
而不是[y, ys]
)- 您的模式的
:[]
匹配列表定义的右括号,而不是最终的[]
元素(可能的修复::[]:[]
而不是:[]
;第一个[]
匹配元素,第二个[]
匹配列表结束标记)