哈斯克尔不符合列表

时间:2015-06-20 06:36:53

标签: list haskell pattern-matching

我想尝试一些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)与任何列表都不匹配?

1 个答案:

答案 0 :(得分:4)

它应该至少给你一个关于功能endoceDirect的警告,当然,它与encodeDirect没有任何关系。

作为旁注,通用案例通常是一个坏主意,