首页 > 解决方案 > 如何在 Haskell 中创建数字列表

问题描述

我需要创建一个函数来制作一个大小为行和列的板,然后用零填充它。mkBoard 2 3 将使 [[0,0,0],[0,0,0]]

我真的不知道从哪里开始,因为我是 Haskell 编程的新手,我在想这个函数应该是这样的:

mkBoard m n= [m | ???? take n (repeat 0)]

但我不确定这是否是正确的方法。

谢谢您的帮助。

标签: haskell

解决方案


正如@arrowd 已经提到的,有一个replicate用于take n (repeat x). 你可以用 来创建你的板子的一行replicate n 0,然后用这样的行创建板子mkBoard m n = replicate m (replicate n 0)

您还可以创建此函数的更通用版本以使用任何值填充该字段:

genericMkBoard :: a -> Int -> Int -> [[a]]
genericMkBoard x m n = replicate m (replicate n x)

mkBoard并使用部分应用程序定义您的:

mkBoard = genericMkBoard 0

UPD:你也可以让它更符合replicate(感谢@chepner):

replicate2D m n x = replicate m (replicate n x)

mkBoard m n = replicate2D m n 0

推荐阅读