我正在尝试使用列表推导来实现一个函数,它会按指定的次数复制元素。我真的坚持这个,但我正试图
例如
copy 2 'a' = aa
这是我到目前为止所做的:
copy2 :: Int->a->[a]
copy2 x y = func1 y [b|b<-[1..x]]
其中func1以某种方式将y映射到x
的每个元素这不是很多,但我真的对这个对不起的人一无所知。
答案 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]]