Haskell - 数独中的空白单元格

Haskell - Blank cells in a sudoku

很抱歉,如果这个确切的问题已经被问到...

我在 Haskell 有一个数独游戏,希望能在这里提供一些反馈。

目标是实现一个表示仅包含空白单元格的数独的函数,然后将其命名为allBlankSudoku :: Sudoku,其中

data Sudoku = Sudoku [[Maybe Int]]

你应该使用列表理解或映射函数来做到这一点,

map :: (a -> b) -> [a] -> [b]

这是我的看法:

allBlankSudoku :: Sudoku

allBlankSudoku = Sudoku (map (replicate 9) (replicate 9 Nothing))

但是!这是我的问题:在说明中它说 "Do not use copy-and-paste programming here! Your definition does not need to be longer than a few short lines."

所以,我上面的代码是不是复制粘贴的?还有其他方法可以做到吗?注意:这只是 3 个任务中的第一个任务,所以我认为它应该不难。

不,这不是复制粘贴,您让您的程序在此处进行复制粘贴。复制粘贴代码是关于重复 源代码 的行或块。比如cell_0_0 = nothingcell_0_1 = nothing等。其实你的代码看起来挺简洁的。

此处复制粘贴编程可能意味着您的教授不想要:

allBlank = Sudoku [[Nothing,Nothing,Nothing ... ]
                  ,[Nothing,Nothing,Nothing ...
                  ...
                  ]

顺便提一下,我想

allBlank = Sudoku (replicate 9 (replicate 9 Nothing))

对我来说更容易理解:)

如果您需要使用列表理解,您可以这样做:

[ [ Nothing | x <- [1..9] ] | y <- [1..9] ]

复制粘贴编程就是复制一行代码并多次粘贴以完成相同的事情。 递归是要走的路。