我正在尝试使用列表推导来实现一个函数,该函数根据指定的次数复制元素。我真的坚持这一点,但我正在努力
例如
copy 2 'a' = aa
这是我到目前为止所拥有的:
copy2 :: Int->a->[a]
copy2 x y = func1 y [b|b<-[1..x]]
其中 func1 以某种方式将 y 映射到 x 的每个元素
这不是很多,但我真的对这个对不起伙计们一无所知。
我正在尝试使用列表推导来实现一个函数,该函数根据指定的次数复制元素。我真的坚持这一点,但我正在努力
例如
copy 2 'a' = aa
这是我到目前为止所拥有的:
copy2 :: Int->a->[a]
copy2 x y = func1 y [b|b<-[1..x]]
其中 func1 以某种方式将 y 映射到 x 的每个元素
这不是很多,但我真的对这个对不起伙计们一无所知。
即使答案已被接受,我想指出您在问题中说了一些非常重要的内容,这可能会导致您得到答案。
你说:
copy2 :: Int->a->[a] copy2 x y = func1 y [b|b<-[1..x]]
其中 func1 以某种方式将 y 映射到 x 的每个元素
如果我们稍微清理一下措辞——我相信这就是你的意思——我们实际上想要的东西是由对ant 值map
的理解产生的列表的每个元素。const
y
好吧,制作一个为单个 x 生成值 y 的函数很简单:
const y x = y
事实上,这个功能已经足够有用了,它已经存在于 Prelude 中了!
现在我们只需要map
遍历列表的每个元素。
copy2 x y = map (const y) [b | b <- [1..x]]
或者稍微简化一下,以真正展示我们与您的原始描述有多接近,(即使我知道您需要列表理解)
copy2 x y = map (\x -> y) [1..x]
“为每个 x 将 x 映射到 y。”
所以你看,你一直都有。
copy2 qty item = [item|_<-[1..qty]]