2017-06-30 9 views
1

Ich war neugierig, wie Replikat in Haskell verwenden, um eine Liste von ganzen Zahlen zu erstellen, die eine Reihe von Zahlen wiederholt. Dies ist für eine Hausaufgabe und die Regeln verwirren mich irgendwie zu beginnen, aber im Wesentlichen möchte ich eine Liste erstellen, die 1..9 9 Mal ist, so dass 81 ganze Zahlen in dieser Liste nur 1..9 jedes Mal. Ich habe ein paar Dinge auf Google-Suche versucht, dass das, was ich bekam in der NäheWie replizieren, um eine Matrix zu generieren

war
zipWith' (replicate 9 1) [1..] 

die nahe schien, was ich für vorging, aber es schraubte außer Kontrolle und ich bin nicht sicher, wie zurücksetzen es zurück zu 1 nehme ich

Mein erster Gedanke etwas super einfach wie in

replicate 9 [1..9] 

war das zu sehr, sehr nahe scheint, was ich brauche, aber es ist eine Liste von Listen und ich bin nicht sicher, wie man mach nur eine Liste all dieser Nummern. Jede Hilfe wird sehr geschätzt.

Antwort

4

Um eine Liste der Listen zu glätten, Sie concat verwenden können:

concat (replicate 9 [1..9]) 

Eine weitere Option eine unendliche Liste von [1..9, 1..9, 1..9, …] ist cycle und nehmen die ersten 81 Elemente mit machen:

take 81 (cycle [1..9]) 
+0

Vielen Dank! Genau das habe ich gesucht. :) – Boo89100

1

So Sie haben eine Liste von Listen [[Int]], und Sie möchten eine einfache Liste [Int] daraus machen. Ask Hoogle! Das erste Ergebnis ist

concat :: [[a]] -> [a] 
5

Da es eine Halbgruppe über Listen ist, Sie stimes verwenden kann es einige feste Anzahl von Malen zu wiederholen.

stimes:: (Semigroup a, Integral b) => b -> a -> a

Wiederholen ein Wert n mal.

stimes 9 [1..9] 
Verwandte Themen