Haskell - Пустые ячейки в судоку

Извините, если этот ТОЧНЫЙ вопрос уже был задан...

У меня есть задание судоку на Haskell, и я был бы признателен за отзывы здесь.

Цель состоит в том, чтобы реализовать функцию, представляющую судоку, содержащую только пустые ячейки, и затем назвать ее allBlankSudoku :: Sudoku, где

data Sudoku = Sudoku [[Maybe Int]]

Вы должны использовать понимание списка или функцию карты, чтобы сделать это,

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

Это мой взгляд на это:

allBlankSudoku :: Sudoku

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

НО! Вот мой вопрос: в инструкциях сказано: «Не используйте здесь программирование копирования и вставки! Ваше определение не должно быть длиннее нескольких коротких строк».

Итак, мой код выше копирует и вставляет или нет? Есть ли дополнительный способ сделать это? Примечание. Это всего лишь первая задача из трех, поэтому я не думаю, что она должна быть сложной.


person mathgrad93    schedule 28.09.2015    source источник
comment
Если ты действительно хочешь, let r9 = replicate 9 in Sudoku (map r9 (r9 Nothing)). Но на самом деле это не более читабельно и не более эффективно.   -  person user2407038    schedule 29.09.2015
comment
Хм, я добавил code-formatting, но это больше касается практики кода, чем форматирования кода. Есть ли кто-нибудь, кто знает хороший существующий тег для этого?   -  person Maarten Bodewes    schedule 29.09.2015
comment
@MaartenBodewes, я бы пометил это не по теме. Мы не можем читать мысли их учителей лучше, чем они.   -  person dfeuer    schedule 29.09.2015
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он касается чтения мыслей вашего учителя.   -  person dfeuer    schedule 29.09.2015
comment
@dfeuer Я не согласен, программирование с копированием и вставкой - хорошо известный термин среди программистов. Язык — это способ передать то, что у кого-то на уме, и в этом случае мы лучше читаем мысли учителя, чем неопытный программист. Кроме того, это программирование с копированием и вставкой кажется правильным вопросом.   -  person Maarten Bodewes    schedule 29.09.2015


Ответы (3)


Копирование и вставка программирования здесь, вероятно, означает, что ваш профессор не хочет:

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

Кстати, как второстепенное замечание, я думаю

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

мне немного легче понять :)

Если вам нужно использовать списки, вы можете сделать следующее:

[ [ Nothing | x <- [1..9] ] | y <- [1..9] ]
person Justin L.    schedule 28.09.2015

Нет, это не копирование и вставка, вы позволяете своей программе выполнять копирование и вставку здесь. Код копирования и вставки — это повторяющиеся строки или блоки исходного кода. Например, cell_0_0 = nothing, cell_0_1 = nothing и т. д. На самом деле ваш код выглядит довольно лаконично.

person Maarten Bodewes    schedule 28.09.2015

Программирование с копированием и вставкой — это когда вы копируете одну строку кода и вставляете ее несколько раз, чтобы сделать одно и то же. Рекурсия - это путь.

person jedi.jesse    schedule 28.09.2015