Haskell - 数独的空白单元格

时间:2015-09-28 23:41:26

标签: haskell functional-programming code-formatting

对不起,如果已经提出这个问题,我很抱歉......

我在Haskell有一个数独作品,并希望得到一些反馈。

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

data Sudoku = Sudoku [[Maybe Int]]

您应该使用列表推导或地图功能来执行此操作,

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

这是我的看法:

allBlankSudoku :: Sudoku

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

BUT!这是我的问题:在说明中说明"不要在这里使用复制和粘贴编程!您的定义不需要超过几条短线。"

那么,我的代码是否可以复制粘贴?还有另外一种方法吗?注意:这只是3中的第一项任务,所以我认为它不应该是困难的。

3 个答案:

答案 0 :(得分:5)

这里的复制和粘贴编程可能意味着你的教授不想要:

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

顺便说一句,作为一个小调,我想

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

对我来说更容易理解:)

如果您需要使用列表推导,您可以执行以下操作:

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

答案 1 :(得分:0)

不,这不是复制粘贴,你让你的程序在这里进行复制粘贴。复制粘贴代码是关于重复源代码的行或块。例如cell_0_0 = nothingcell_0_1 = nothing等。实际上,您的代码看起来非常简洁。

答案 2 :(得分:0)

复制和粘贴编程是指复制一行代码并多次粘贴以执行相同操作。 递归是要走的路。