2013-07-29 49 views
3

我想在Haskell使用下面的代码/功能:为什么模式匹配不在Haskell的封面列表中?

test :: String -> String -> Bool 
test (x:xs) (x:ys) = True 
test _  _ = False 

这应该检查是否两份名单完全相同的元素开始。
但这不起作用。
我的编译器说:Conflicting definitions for x

我认为这样的模式匹配必须在功能语言中工作。我刚刚和Prolog合作过,我很确定它在那里工作:/

这是不是在Haskell中实现,或者是我的语法错误?

+0

当列表包含无法比较的项目(例如函数)时,会产生隐式比较的问题。允许这种隐式比较可能(可能)使语法不太清晰。虽然存在与数字常量匹配的奇怪事物,它使用整数和比较。 – Laar

回答

6

你可能想要那样的东西。

test :: String -> String -> Bool 
test (x:xs) (y:ys) = x == y 
test _  _ = False 

由于@TikhonJelvis注意到,haskell不是Prolog,所以你不能检查模式匹配中的变量的平等。

3

模式匹配不统一变量。

test :: String -> String -> Bool 
test (x:xs) (y:ys) = x == y 
test _  _ = False 

因此,您可以像上面那样分别测试每个变量是否相等。