为什么这会给我错误?我只是尝试这个作为测试来学习Haskell我只是在第二个输入中捆绑了元组。为什么这不编译?谢谢
test :: (Int,Int) -> [(Int,Int)] -> Int
test [] [] = []
test xs [] = []
test (x,xs) (y:ys) = test (x,xs) ys
感谢@Carcigenicate指出第一个错误。现在,如果我们有
test :: (Int,Int) -> [(Int,Int)] -> Int
test xs [] = []
test (x,xs) (y:ys) = test (x,xs) ys
我得到了
• Couldn't match expected type ‘Int’ with actual type ‘[t0]’
• In the expression: []
In an equation for ‘test’: test xs [] = []
答案 0 :(得分:4)
你的函数签名说第一个参数应该是2个整数的元组,但是在你的第一个模式匹配行中:
test [] [] = []
^
您尝试将元组与列表进行匹配。
类型不匹配,因此错误。
除非它是什么类型,否则元组永远不会是空的。与列表不同,元组无法添加或删除;它们有固定的尺寸。
如果你说元组将有2个值,它将始终有2个值。无需检查它是否为空。看起来你可以摆脱那条线,因为它没有做任何合法或有用的事情。
另请注意,您的命名有点令人困惑。通常,x
和xs
代表集合的头部和尾部。元组不是真的有,只是不同的"插槽"。