应用程序中的Haskell Type错误

时间:2014-04-26 19:11:05

标签: haskell

我在这一行的应用程序中不断出现类型错误:filter1(k)(y:ys)= if若出现(headof(y:ys))(k)则filter1 k(ys)else filter1 k1(ys)其中k1 = k:y 请帮忙, 提前谢谢

occursIn (x) [] = False

occursIn x (x1:xs) = if (x == x1) then True else occursIn x (xs)

headof [] = error "empty list"

headof (x:xs) = x

filter1 (k) [] = k

filter1 (k) (y:ys) = if occursIn (headof (y:ys))(k) then filter1 k (ys) else filter1 k1 (ys) where k1 = k:y


filter [] = []
filter (x:xs) = if xs == [] then x else filter1 [] (x:xs)

1 个答案:

答案 0 :(得分:1)

(:) :: a -> [a] -> [a]

a : b列表 a前面的元素 b。在where k1 = k:y中,看起来你有倒退。

filter (x:xs) = if xs == [] then x else filter1 [] (x:xs)

then情况x应该返回一个列表(因为所有其他情况都返回列表),而是只返回一个元素。也许你的意思是[x]

我建议将filter重命名为其他内容,因为filter已经是标准库中函数的名称,当您尝试使用它时会出现“模糊出现”错误。

现在可能是开始尝试类型签名的好时机。当我打算写一个函数时,我通常首先编写类型签名,并在编写函数体时查阅它。它有助于解决这些小错误,并且还可以改善编译器为您提供的错误消息。

希望这有帮助!