Haskell错误Main.hs:(39,1) - (44,64):函数sumList中的非穷举模式

时间:2014-08-23 15:27:08

标签: haskell

你能帮我解决这个问题吗?编译器生成此错误:

Haskell error Main.hs:(39,1)-(44,64):
    Non-exhaustive patterns in function sumList

我的代码是

sumList:: [[Char]] -> [Char] -> Float
sumList [] element = 0
sumList (x:xs) element
     |x  == [] = 0
     |xs == [] = 0
     |x  == "" = 0
     |((splitOn "|" x)!!1) == element = 1 + (sumList xs element)

2 个答案:

答案 0 :(得分:1)

我修好了, 需要再添加一行来处理其他情况

|otherwise = (sumList xs element)

答案 1 :(得分:1)

我发现你的目标和代码非常模糊:

  • 为什么浮动类型?你不想算点什么吗?
  • x == [] = 0x == "" = 0是否真的有必要?他们有什么不同?

我猜想你想要计算某些元素,有一些标记。 告诉我,如果我错了。

我最终得到了这段代码(不确定它是否符合您的问题):

hasTag :: String -> String -> Bool
hasTag tag word = case splitOn "|" word of
                    _:[] -> False -- No tag
                    _:tags -> tag `elem` tags

countHavingTag :: String -> [String] -> Int 
countHavingTag tag = length . filter (hasTag tag)

在Haskell中显式递归是非常不恰当的,你通常不需要它。

您可能想了解更多信息:

  • 类型
  • 递归(基本情况和递归规则)
  • 部分功能