11
votes

Haskell Liste des tuples à la liste?

est-il possible de convertir une liste de tuples [(int, int)] 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

exemple: xxx


0 commentaires

5 Réponses :


12
votes

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, [(1,2), (3,4)] devrait devenir [1,2,3,4] .

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: xxx

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 pour terminer les deux types différents: xxx


1 commentaires

ou (>> = \ (a, b) -> [gauche A, droite B])



0
votes
f [] = []
f [(x, y) : xs] = x : y : f xs

1 commentaires

[(x, y): xs] est de type [[(a, a)]]



7
votes

Vous pouvez également utiliser un pli et éviter une récursion explicite: xxx

ou: xxx

(pour les éléments du même type)


0 commentaires

11
votes

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]


0 commentaires

2
votes

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 traversable (et d'autres tels que applicatif et monad ). Donc, un tuple peut être converti en liste par Tolist. Tuple2 (où Tolist < / a> est à partir de data.flolable ) et xxx

Vous pouvez également l'utiliser pour d'autres tuples, par exemple concatmap (Tolist. Tuple5) etc.


0 commentaires