有没有办法在没有辅助函数的情况下在Haskell中轻松构造重复元素列表?

Jak*_*ake 3 haskell functional-programming list

给定类型的元组(Int, a),例如(n,c),我希望构造一个列表[a],其中该元件c被重复n多次,即,(4, 'b')变为"bbbb".我目前的解决方案如下:

decode :: (Int, a) -> [a]
decode (n, a) = map (\x -> a) [1..n]
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我正在映射一个匿名函数,该函数总是返回a一个n元素列表,即前n个正整数.有没有更有效的方法来做到这一点?我对构建整数列表并从不使用它感到很难过.另一种解决方案是使用辅助函数并递归n,但这看起来很混乱并且过于复杂.是否有类似于以下python代码的东西?

'b'*4
Run Code Online (Sandbox Code Playgroud)

ram*_*ion 8

uncurry replicate

Prelude> :t uncurry replicate
uncurry replicate :: (Int, b) -> [b]
Prelude> uncurry replicate (4, 'b')
"bbbb"
Run Code Online (Sandbox Code Playgroud)

  • @RamonSnir:当你说'uncurry`被认为是命令式的时,我不明白你的意思. (2认同)

hug*_*omg 7

有一个内置的复制品.

查看Hoogle何时需要查找是否已有功能可以满足您的需求.


Ram*_*nir 6

你想要的replicate.

找到这些东西的好方法:http: //haskell.org/hoogle/?intel = Int +-%3E + a + - %3E +%5Ba%5D

  • 大声笑,我们现在需要找到一种玩摇滚纸的方法. (2认同)
  • 我突然想要为hoogle做一个lmgtfy克隆. (2认同)