2017-02-08 5 views
-8

Ich muss ein Spielbrett in Haskell machen, indem ich 2 ints eine Eingabe nehme, die die Höhe und Breite der Tafel angibt. Die Karte muss das Format [[Int]] haben, und alle Leerzeichen müssen mit der Ganzzahl 1 gefüllt werden.Haskell: Liste erstellen und füllen

Zum Beispiel makeBoard 2 3 sollte zurückgeben ->[[1,1,1],[1,1,1]]

+0

Sie auch eine Platte mit als 'Karte (Int, Int) Int' erachtet; Dies würde Ihnen erlauben, nur nicht-triviale ("nicht-leere", "nicht-wandige") Zellen zu speichern, und der Code zum Aktualisieren eines Zellenwerts ist bereits für Sie geschrieben. – 9000

+0

Bis jetzt habe ich es geschafft, ein einzelnes Array mit der richtigen Menge an Ints zu erzeugen, aber ein leeres zu zeichnen, wie man gefüllte Listen in Listen erzeugt – DaoDib

+2

@DaoDib: Nun, warum zeigst du diesen Versuch nicht für einen Start? –

Antwort

2

können Sie verschachtelte replicate :: Int -> a -> [a] verwenden:

makeBoard :: Num a => Int -> Int -> [[a]] 
makeBoard h w = replicate h $ replicate w 1 

replicate nimmt somit ein Int und ein Element a und generiert eine Liste [a] die n mal enthält dieses Element. Also die zweite replicate wird eine Liste von Einsen zurückgeben, und das erste Replikat repliziert diese Liste h mal.

Beachten Sie, dass replicate n x tatsächlich gleichwertig ist:

-- equivalent 
replicate n x = take n $ repeat x 

oder kürzer:

replicate n = take n . repeat