对不起,如果已经提出这个问题,我很抱歉......
我在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中的第一项任务,所以我认为它不应该是困难的。
答案 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 = nothing
,cell_0_1 = nothing
等。实际上,您的代码看起来非常简洁。
答案 2 :(得分:0)
复制和粘贴编程是指复制一行代码并多次粘贴以执行相同操作。 递归是要走的路。