首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为“`Cons`”执行“扁平”

为“`Cons`”执行“扁平”
EN

Code Review用户
提问于 2014-12-12 05:13:58
回答 1查看 107关注 0票数 2

考虑到Cons的以下定义:

代码语言:javascript
复制
data Cons a = Cons a (Cons a) 
             | Empty 
             deriving Show

我实现了一个flatten函数。

它意味着完全像concat :: [[a]] -> [a]那样工作,但是对于Cons来说。

代码语言:javascript
复制
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))

测试数据:

代码语言:javascript
复制
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

一些测试:

代码语言:javascript
复制
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))))
EN

回答 1

Code Review用户

发布于 2014-12-12 12:15:20

好吧,除非您想要添加实例以允许折叠等等,或者转换到Data.List,否则我认为这是非常完美的。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/73427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档