2010-12-27 8 views
1

Wie verwende ich in Haskell beliebige Eingabe-Sets in Listen-Comprehensions?Beliebige Eingabe-Sets in Listen-Comprehensions in Haskell

Ich gebe Ihnen ein Beispiel dessen, was, nachdem ich bin:

generate :: [[[Integer]]] -> [[[Integer]]] 
generate a = [ result | 
     i1 <- a !! 0, 
     i2 <- a !! 1, 
     i3 <- a !! 2, 
     i4 <- a !! 3, 
     ... 
     i99 <- a !! 99, 
     let result = [i1,i2,i3,i4, ..., i99], 
     isCorrect result 
    ] 
+2

Warten Sie, wat? Was willst du? Ihr Beispiel ist nur eine wirklich ausführliche Methode zum Teilen und Filtern. – delnan

+0

@delnan Nein. Ich kann sehen, wie man es auf den ersten Blick denkt. Was ich will, ist eher einer Suche nach allen möglichen Permutationen einer Matrix ähnlich. –

+2

Eine ähnliche Frage gefunden: http://stackoverflow.com/questions/3742235/haskell-generalizing-problem-involving-list-comprehensions –

Antwort

8

Unter der Annahme, a Länge sein von 100 garantiert wird, denke ich, was Sie wollen generate a = filter isCorrect $ sequence a ist. Hier wird sequence in der [] Monade verwendet, um das kartesische Produkt einer Liste von Listen zu erzeugen.

+0

Sehr, sehr kompakter Code. Ich denke, ich werde lernen, die neu gefundene Sequenzfunktion zu lieben! Vielen Dank. –