有时您需要一个方格的数据结构,例如,如果您为棋盘建模。表示方格数据的最简单方法是通过列表列表。
[[0,1,0],
[1,0,1],
[0,1,0]]
以上是方格列表的示例。我的第一次尝试:
import Data.List
checker :: Integral i => i -> a -> a -> [[a]]
checker n a b = genericTake n $ intersperse (genericTake n xs2) $ repeat (genericTake n xs1)
where xs1 = checker' a b
xs2 = drop 1 xs1
checker' :: a -> a -> [a]
checker' a b = intersperse b $ repeat a
代码很详细,但结果是正确的:
*Main> checker 5 0 1
[[0,1,0,1,0],[1,0,1,0,1],[0,1,0,1,0],[1,0,1,0,1],[0,1,0,1,0]]
如何在Haskell中编写一个函数来创建任意大小的列表?
答案 0 :(得分:9)
evenRow = 0:oddRow -- evenRow = 0:1:evenRow
oddRow = 1:evenRow
board = evenRow:oddRow:board
这是一块无限格仔板。锯掉任何矩形部分:
smallBoard = take 17 $ map (take 11) board
根据需要对此进行参数化。
编辑:为了便于说明,我没有在这里使用cycle
。在实际代码中你可能想要它:
board = cycle [cycle [0,1], cycle [1,0]]
它短得多,但坦率地看起来相当神秘。