Haskell - Празни клетки в судоку

Съжалявам, ако вече е зададен ТОЧЕН въпрос...

Имам задание за судоку в Haskell и ще се радвам на обратна връзка тук.

Целта е да се приложи функция, която представлява судоку, което съдържа само празни клетки, и след това да се наименува allBlankSudoku :: Sudoku, където

data Sudoku = Sudoku [[Maybe Int]]

Трябва да използвате разбиране на списък или функцията map, за да направите това,

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

Това е моето мнение за това:

allBlankSudoku :: Sudoku

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

НО! Ето моят въпрос: В инструкциите се казва "Не използвайте програмиране за копиране и поставяне тук! Вашата дефиниция не трябва да бъде по-дълга от няколко кратки реда."

И така, кодът ми по-горе копиране и поставяне ли е или не? Има ли допълнителен начин да го направя? Забележка: Това е само първата задача от 3, така че не мисля, че трябва да е трудна.


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
Хм, сложих форматиране на код, но това е повече за практика на код, отколкото за форматиране на код. Има ли някой, който знае добър съществуващ етикет за това?   -  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