3

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

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

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

我认为像这样的模式匹配必须在函数式语言中工作。我之前刚和 Prolog 一起工作过,我很确定它在那里工作过:/

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

4

2 回答 2

6

你可能想要这样的东西。

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

正如@TikhonJelvis 注意到的那样,haskellis not a Prolog,因此您无法检查模式匹配中变量的相等性。

于 2013-07-29T15:41:54.507 回答
3

模式匹配不统一变量。

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

因此,您可以分别测试每个变量的相等性,如上所述。

于 2013-07-29T15:42:36.150 回答