你能帮我解决这个问题吗?编译器生成此错误:
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)
答案 0 :(得分:1)
我修好了, 需要再添加一行来处理其他情况
|otherwise = (sumList xs element)
答案 1 :(得分:1)
我发现你的目标和代码非常模糊:
x == [] = 0
和x == "" = 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中显式递归是非常不恰当的,你通常不需要它。
您可能想了解更多信息: