我想尝试一些haskell并开始遇到99个haskell问题,目前我被困在13:列表的行程编码(尽管我的问题更为通用)
--datatype
data En a = Multiple (Int, a) | Single a | Empty
deriving (Show)
--helper
getnum :: (Eq a9) => [a9] -> Int
getnum [] = 0
getnum (x:xs)
| x == head xs = 1 + getnum xs
| otherwise = 1
encodeDirect :: [a] -> [En a]
endoceDirect xxs@(x:xs)
| getnum xxs == 1 = Single x : encodeDirect xs
| otherwise = Multiple ((getnum xxs), x) : encodeDirect (drop (getnum xxs) xxs)
encodeDirect _ = [Empty]
这应该给我最后一个[Empty]的解决方案,但是当我用ghci中的任何类型的列表/字符串调用encodeDirect时它只是直接通过,而我得到的只是[Empty]。
为什么xxs@(x:xs)
与任何列表都不匹配?
答案 0 :(得分:4)
它应该至少给你一个关于功能endoceDirect
的警告,当然,它与encodeDirect
没有任何关系。
作为旁注,通用案例通常是一个坏主意,