【问题标题】:Haskell: generate and fill list of listsHaskell:生成和填充列表列表
【发布时间】:2017-06-26 13:23:00
【问题描述】:

我必须在 Haskell 中制作一个游戏板,输入 2 个整数,表示板的高度和宽度。板子必须是[[Int]]的格式,所有空格都必须用整数1填充。

例如makeBoard 2 3,应该返回-> [[1,1,1],[1,1,1]]

【问题讨论】:

  • 您也可以考虑将董事会作为Map (Int, Int) Int;这将允许您仅存储非平凡(“非空”、“非墙”)单元格,并且已经为您编写了更新单元格值的代码。
  • 到目前为止,我已经设法生成了一个具有正确数量的 Ints 的数组,但是对于如何在列表中生成填充列表却一无所知
  • @DaoDib:那你为什么不先展示一下这个尝试呢?
  • 9000,听起来是个不错的方法,但是任务需要特定格式[[Int]]
  • @DaoDib:使用您的代码生成一个充满1s 的列表,并尝试将其转换为使列表充满任意给定值的代码。您将能够重用该函数来用整数填充列表,并用其他列表填充列表。

标签: list haskell


【解决方案1】:

你可以使用嵌套的replicate :: Int -> a -> [a]:

makeBoard :: Num a => Int -> Int -> [[a]]
makeBoard h w = replicate h $ replicate w 1

replicate 因此接受一个Int 和一个元素a 并生成一个列表[a],其中包含该元素的n 倍。所以第二个replicate 将返回一个列表,第一个复制将复制该列表h 次。

注意replicate n x实际上等价于:

-- equivalent
replicate n x = take n $ repeat x

或更短:

replicate n = take n . repeat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2013-08-12
    • 2018-06-01
    • 2019-11-06
    • 2018-11-07
    相关资源
    最近更新 更多