考虑到Cons的以下定义:
data Cons a = Cons a (Cons a)
| Empty
deriving Show我实现了一个flatten函数。
它意味着完全像concat :: [[a]] -> [a]那样工作,但是对于Cons来说。
flatten :: Cons (Cons a) -> Cons a
flatten Empty = Empty
flatten (Cons (Empty) ys) = flatten ys
flatten (Cons (Cons x xs) ys) = Cons x (flatten (Cons xs ys))测试数据:
test1 :: Cons (Cons Int)
test1 = Cons (Cons 5 Empty) Empty
test2 :: Cons (Cons Int)
test2 = Cons (Cons 5 (Cons 10 Empty)) Empty
test3 :: Cons (Cons Int)
test3 = Cons (Cons 5 (Cons 10 (Cons 20 Empty))) test2一些测试:
ghci> flatten test1
Cons 5 Empty
ghci> flatten test2
Cons 5 (Cons 10 Empty)
ghci> flatten test3
Cons 5 (Cons 10 (Cons 20 (Cons 5 (Cons 10 Empty))))发布于 2014-12-12 12:15:20
好吧,除非您想要添加实例以允许折叠等等,或者转换到Data.List,否则我认为这是非常完美的。
https://codereview.stackexchange.com/questions/73427
复制相似问题