基本haskell:列表理解复制元素n次

时间:2013-10-18 22:02:22

标签: haskell

我正在尝试使用列表推导来实现一个函数,它会按指定的次数复制元素。我真的坚持这个,但我正试图

例如

copy 2 'a' = aa

这是我到目前为止所做的:

copy2 :: Int->a->[a]
copy2 x y = func1 y [b|b<-[1..x]]

其中func1以某种方式将y映射到x

的每个元素

这不是很多,但我真的对这个对不起的人一无所知。

2 个答案:

答案 0 :(得分:7)

尽管答案已经被接受,但我想指出你在你的问题中说了一些非常重要的东西,这可能会让你得到一个答案。

你说:

copy2 :: Int->a->[a]
copy2 x y = func1 y [b|b<-[1..x]]
     

其中func1以某种方式将y映射到x

的每个元素

如果我们稍微清理短语 - 我确信这就是你的意思 - 我们实际上想要map通过对const蚂蚁的理解产生的列表的每个元素y价值const y x = y

好吧,创建一个为单个x生成值y的函数很简单:

map

事实上,这个功能非常有用,它已经存在于Prelude中了!

现在我们只需copy2 x y = map (const y) [b | b <- [1..x]] 覆盖列表中的每个元素。

copy2 x y = map (\x -> y) [1..x]

或稍微简化,以真实地显示我们与您的原始描述有多接近,(尽管我知道您需要列表理解)

{{1}}

“将x映射到每个x的y。”

所以你看,你一直都有。

答案 1 :(得分:4)

copy2 qty item = [item|_<-[1..qty]]