为什么++不能用于模式匹配?

use*_*706 5 haskell list pattern-matching

来自LearnYouAHaskell:

还有一件事 - 你不能在模式匹配中使用++.如果你试图模式匹配(xs ++ ys),那么第一个和第二个列表中的内容是什么?这没有多大意义.匹配(xs ++ [x,y,z])或只是(xs ++ [x])的东西是有意义的,但由于列表的性质,你不能这样做.

我正在努力通过列表的性质来解释他的意思,为什么这不可能.

Lee*_*Lee 8

您对构造函数进行模式匹配,对于列表,有两个构造函数,空列表[]和'cons' :,其中cons有两个参数,列表的头部和尾部.++是一个附加两个列表的函数,因此无法与之匹配.

如果你可以匹配它,那么模式中xsys模式中可能存在多个匹配xs ++ ys.例如,如果您像这样选择一个小列表,[1]则有两种可能性

xs == [] and ys == [1]
xs == [1] and ys == []
Run Code Online (Sandbox Code Playgroud)

所以比赛是模糊的,这是引用的内容.