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

decode :: (Int, a) -> [a]
decode (n, a) = map (\x -> a) [1..n]


如您所见,我正在映射一个匿名函数,该函数始终在a元素列表(前n个正整数)上返回n。有没有更有效的方法可以做到这一点?我对构造一个整数列表并且从不使用它感到难过。另一种解决方案是使用辅助函数并递归n,但这似乎很麻烦且过于复杂。也许与以下python代码相似?

'b'*4

最佳答案

uncurry replicate

Prelude> :t uncurry replicate
uncurry replicate :: (Int, b) -> [b]
Prelude> uncurry replicate (4, 'b')
"bbbb"

09-28 06:13