est-il possible de convertir une liste de tuples exemple: p> [(int, int)] code> comme une manière générique qui valide à toute taille d'entrée? .. j'ai vu dans diverses questions qui ne sont pas possibles génériquement
5 Réponses :
Votre question n'est pas très certaine sur la manière dont les tuples doivent être convertis en liste. Je suppose que vous voulez les avoir flattendant - par exemple, Cette traduction n'est possible que si les deux éléments de votre tuple sont du même type. Dans ce cas, vous pouvez faire quelque chose comme ceci: p> dans l'affaire général, une telle traduction est impossible. Une chose que je pouvais imaginer pour rendre l'impossible possible est d'utiliser [(1,2), (3,4)] code> devrait devenir [1,2,3,4] code >. code> pour terminer les deux types différents: p>
ou (>> = \ (a, b) -> [gauche A, droite B]) code>
f [] = [] f [(x, y) : xs] = x : y : f xs
[(x, y): xs] est de type [[(a, a)]]
Vous pouvez également utiliser un pli et éviter une récursion explicite: ou: p> (pour les éléments du même type) p> p>
the lentille bibliothèque gère ce cas et des cas similaires de manière cohérente.
> import Data.Tree > let t = Node 1 [Node 2 [Node 3 [], Node 4 []], Node 5 []] > let prettyTree = drawTree . fmap show > prettyTree t 1 | +- 2 | | | +- 3 | | | `- 4 | `- 5 > toListOf (traverse . traverse) [t, t] [1,2,3,4,5,1,2,3,4,5]
Ceci peut également être obtenu par le bibliothèque d'électrodes homogènes (non-responsabilité: qui Je suis l'auteur de). Il définit les emballages pour les tuples qui leur font des instances de Vous pouvez également l'utiliser pour d'autres tuples, par exemple traversable code> (et d'autres tels que applicatif code> et monad code>). Donc, un tuple peut être converti en liste par Tolist. Tuple2 code> (où Tolist < / a> est à partir de data.flolable code>) et concatmap (Tolist. Tuple5) code> etc. p> p>