J'ai les deux fonctions suivantes écrites.Fonction Haskell et fonctions de désassemblage
pair :: [a] -> [(a, a)]
pair [] = []
pair [x] = []
pair (x1:x2:xs) = (x1, x2) : pair xs
unpair :: [(a, a)] -> [a]
unpair [] = []
unpair ((x1, x2):xs) = x1 : x2 : unpair xs
La paire prendra des paires d'éléments et en fabriquera 2-tuples. Si la liste contient un nombre impair d'éléments, ignorez le dernier. Unpair est l'inverse de la paire.
Ceux-ci fonctionnent, mais se demandent s'il existe une façon plus succincte de les écrire.
Il est peut-être un peu bavard, mais je dirais qu'il gagne haut la main en termes de clarté par rapport aux réponses à ce jour. (Sans vouloir offenser ces auteurs.) –
Je pense que le point à retenir ici est qu'une fonction eachOther sur les listes serait utile puisque les gens gravitent vers l'approche zip. Le paquet splits sur Hackage a splitEvery qui rendrait ce style de solution plus perspicace. – Anthony
Haine de le dire, mais pour les alternatives que j'ai vu jusqu'à présent: je l'ai dit succinct, pas obtus.:( – qrest