为什么模式匹配不包括Haskell中的列表头?

Rob*_*ert 3 haskell list pattern-matching

我想在Haskell中使用以下代码/功能:

test :: String -> String -> Bool
test (x:xs) (x:ys) = True
test _        _    = False
Run Code Online (Sandbox Code Playgroud)

这应检查两个列表是否以完全相同的元素开头.
但这不起作用.
我的编译器说:Conflicting definitions for x

我认为像这样匹配的模式必须使用函数式语言.我刚才和Prolog一起工作,我很确定它在那里工作:/

这是不是在Haskell中实现的还是我的语法错了?

ДМИ*_*КОВ 6

你可能想要那样的东西.

test :: String -> String -> Bool
test (x:xs) (y:ys) = x == y
test _        _    = False
Run Code Online (Sandbox Code Playgroud)

正如@TikhonJelvis注意到的那样,haskell不是一个Prolog,所以你无法检查模式匹配中变量的相等性.