如何使用replicate生成矩阵

时间:2017-06-30 04:19:35

标签: haskell

我很好奇如何在Haskell中使用复制来创建重复一组数字的整数列表。这是一个家庭作业和规则有点混淆我开始,但基本上我想要创建一个1..9 9次的列表,所以这个列表中的81个整数每次只有1..9。我在谷歌搜索上尝试了一些东西,让我最接近的是

zipWith' (replicate 9 1) [1..]

这似乎与我的目标很接近,但它已经失控,我不知道如何将其重置为1我想是

我的第一个想法是

中的超级简单
replicate 9 [1..9]

这似乎非常接近我所需要的,但它是一个列表列表,我不知道如何只列出所有这些数字。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

由于列表上有半群,您可以使用stimes重复一定次数。

  

stimes :: (Semigroup a, Integral b) => b -> a -> a

     

重复一次n次。

stimes 9 [1..9]

答案 1 :(得分:4)

要展平列表列表,您可以使用concat

concat (replicate 9 [1..9])

另一种选择是使用[1..9, 1..9, 1..9, …]创建cycle的无限列表,并获取前81个元素:

take 81 (cycle [1..9])

答案 2 :(得分:1)

因此,您有一个列表[[Int]],并希望从中创建一个简单的列表[Int]Ask Hoogle!第一个结果是

concat :: [[a]] -> [a]