Je voudrais faire une méthode dans laquelle je pourrais lui donner une liste de longueurs et que cela rendrait toutes les combinaisons de coordonnées cartésiennes jusqu'à ces longueurs. Plus facile à expliquer avec un exemple:
cart [2,5] Prelude> [ [0,0],[0,1],[0,2],[0,3],[0,4],[1,0],[1,1],[1,2],[1,3],[1,4] ] cart [2,2,2] Prelude> [ [0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1] ]
3 Réponses :
Ceci peut être résolu récursivement. Tout d'abord, le Produit cartésien de rien est {∅}:
cart (x:xs) = [i:rest | i <- [0 .. x-1], rest <- cart xs]
Je parie que votre solution procédurale impliquerait une récursion. Notre solution de haskell impliquera également une récursive.
donc, récursion. D'abord le cas récursif. P>
cart [] = [[]]
umm .. Il est raisonnable d'attendre qu'un STRUT> Comme NewACCT a souligné: P> < Pré> xxx pré> Ceci peut également être trouvé en alimentant la solution précédente à hlint < / a>. p> p> [[[a]] -> [[[a]] code> fonction de ce que nous attendons déjà dans la bibliothèque. Donc, si on n'est pas familier avec la séquence code> code>, trouver une simple question de HOOGLING IT. P>
cart = mapper (Enumfromto 0. Soustraire 1) code>
@NewacCt: Nice. BTW Hlint suggère cela aussi :)
Wow, c'est drôle à quel point la séquence enrignée. Carte (...) Code> est la réponse à ce type de question, puisque c'était ma réaction initiale aussi.
Wow, merci Kenny et Dave. Je n'ai jamais pensé jeter un appel récursif dans la définition de la compréhension de la liste - très cool. La version utilisant la carte et le pli est géniale. J'essaie d'utiliser les fonctions d'ordre supérieur lorsque je peux penser à une manière, c'est donc un excellent exemple d'étudier!
Tant que vous utilisez des fonctions d'ordre supérieur, sachez que cela ne devrait pas être cryptique. et utiliser les bonnes fonctions aidez à s'y rendre,
Séquence Code> est ce dont vous avez besoin ici.
Merci Yairchu pour la solution concise et claire et pour me présenter à Hoogle. Comment ai-je fait quelque chose sans cela ?!
Pour un autre outil intéressant de NDMitchell, vérifiez Hlint. Il suggère une nouvelle raccourcissement à ma solution alors que NewACCCT a souligné.