我想尝试一些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]这应该会给出最终为空的解决方案,但是当我用ghci的任何类型的list/string调用encodeDirect时,它就会直接掉下来,我得到的就是空的。
为什么xxs@(x:xs)不匹配任何列表?
发布于 2015-06-20 07:46:21
它至少会给您一个关于函数endoceDirect的警告,这当然与encodeDirect无关。
顺便说一句,“万无一失”的案子通常是个坏主意,
https://stackoverflow.com/questions/30951067
复制相似问题