我正在尝试使用列表推导来实现一个函数,它按指定的次数复制一个元素.我真的坚持这个但我正在努力
例如
copy 2 'a' = aa
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
copy2 :: Int->a->[a]
copy2 x y = func1 y [b|b<-[1..x]]
Run Code Online (Sandbox Code Playgroud)
其中func1以某种方式将y映射到x的每个元素
这不是很多,但我真的对这个对不起的家伙一无所知.
尽管答案已经被接受,但我想指出你在你的问题中说了一些非常重要的东西,这可能会让你得到一个答案.
你说:
Run Code Online (Sandbox Code Playgroud)copy2 :: Int->a->[a] copy2 x y = func1 y [b|b<-[1..x]]其中func1以某种方式将y映射到x的每个元素
如果我们稍微清理一下短语 - 我确信这就是你的意思 - 我们实际上想要map通过对const蚂蚁价值的理解产生列表的每个元素y.
好吧,创建一个为单个x生成值y的函数很简单:
const y x = y
Run Code Online (Sandbox Code Playgroud)
事实上,该功能非常有用,已经存在于Prelude中!
现在我们只需要map遍历列表中的每个元素.
copy2 x y = map (const y) [b | b <- [1..x]]
Run Code Online (Sandbox Code Playgroud)
或者有点简化,真正展示我们与原始描述有多接近,(尽管我知道你需要列表理解)
copy2 x y = map (\x -> y) [1..x]
Run Code Online (Sandbox Code Playgroud)
"将每个x的x映射到y."
所以你看,你一直都有.