我想在Haskell中使用以下代码/功能:
test :: String -> String -> Bool
test (x:xs) (x:ys) = True
test _ _ = False
这应检查两个列表是否以完全相同的元素开头
但这不起作用。
我的编译器说:Conflicting definitions for x
我认为像这样匹配的模式必须使用函数式语言。我之前和Prolog一起工作过,我很确定它在那里工作:/
这是不是在Haskell中实现的还是我的语法错了?
答案 0 :(得分:6)
你可能想要这样的东西。
test :: String -> String -> Bool
test (x:xs) (y:ys) = x == y
test _ _ = False
正如@TikhonJelvis注意到的那样,haskell
不是Prolog
,所以你无法检查模式匹配中变量的相等性。
答案 1 :(得分:3)
模式匹配不统一变量。
test :: String -> String -> Bool
test (x:xs) (y:ys) = x == y
test _ _ = False
所以你可以分别测试每个变量的相等性,如上所述。