2016-06-21 23 views
-2

Ich bereite mich auf den Test in Haskell vor und habe eine Aufgabe aus dem letzten Test gefunden, in der endlose Listenlisten erstellt wurden.Haskell Liste der Listen generieren

generate :: Num n => n -> [[n]] 

wo Liste ist n-Tupel, n ist von Parameter.

außerdem muss die Liste sortiert werden.

Für exaple:

generate 2 = [[0,0],[0,1],[1,0],[1,1],[0,2],[1,2],[2,0],[2,1],[2,2],[0,3],....] 

Ich habe nur grundlegende Funktionen nutzen.

Ich weiß, dass es sicherlich einfach ist, aber ich weiß nicht, wie es geht, und ich kann es auch nicht im Internet finden.

Ich werde wirklich für jede Hilfe froh sein.

+2

Infinite Tupeln in Haskell nicht möglich sind, die so etwas wie 'Typ TUP = (X, TUP) wäre'. GHC weist solche unendlichen Typen zurück. '[[n]]' ist der Typ einer _list_, die tatsächlich unendlich sein kann (aber nur zur Laufzeit; sie ist für den Typ-Checker absolut endlich). – leftaroundabout

+1

Nicht wirklich; Sie benötigen abhängige Typen, um anzugeben, dass der Rückgabewert eine Liste von Listen der Länge 2 usw. ist. Selbst wenn Sie das könnten, ist "Num" eine zu breite Einschränkung; Sie können keine Liste der Länge 1.5 (oder ein 1.5-Tupel) haben. – chepner

+2

Ich denke, es ist aus dem bereitgestellten Beispiel klar, dass das OP eine unendliche Liste von _lists_ - nicht Tupeln erzeugen will. – ErikR

Antwort

1

Hier ist ein Hinweis für die allTuplesWithMaxElem Funktion ...

Angenommen, Sie alle Listen [a,b,c,d] aus den Zahlen erzeugen wollen [0..2] mit der Einschränkung, dass 2 als eines der Elemente erscheinen.

Betrachten Sie diese Fragen:

If we set a = 0, what are the possibilities for [b,c,d] ? 
If we set a = 1, what are the possibilities for [b,c,d] ? 
If we set a = 2, what are the possibilities for [b,c,d] ?