2013-03-27 5 views
1

Je suis nouveau à Haskell et je veux générer une liste de paires qui ressemble à ceci:Haskell générer des paires de plus en plus triées par la somme des éléments

[(0,1), (0,2), (0,3), (1,2), (0,4), (1,3), (0,5) ....] et ainsi de suite.

J'ai fait une fonction qui génère des paires ordonnées

orderedPairs = [ (x, y) | x <- [0 .. ], y <- [1 ..], x < y] 

, mais je ne sais pas comment aller à partir d'ici. Je vous remercie. :)

+3

Créez une fonction pour générer d'abord la liste des paires pour une somme spécifique, puis utilisez-la pour obtenir la liste entière. Si ce n'est pas une tâche/un exercice dont vous êtes censé tirer des leçons, je vais élaborer avec bonheur. –

Répondre

5

Merci pour l'indice. J'ai réussi à le faire comme ceci:

orderedPairs n = [ (x, y) | x <- [0 .. n], let y = n - x, x < y] 
pairStream n = (orderedPairs n) ++ (pairStream (n + 1)) 
increasingPairs = pairStream 0 

prendre 10 increasePairs renvoie la bonne sortie. :)

+3

Bon, c'est un très bon début. Mais au lieu de filtrer la moitié de la liste avec 'x > = orderedPairs', que je trouve plus agréable. –

+0

Oui, c'est plus joli. Merci pour les conseils. :RÉ – Casteurr

Questions connexes