Tengo las siguientes dos funciones escritas.Par Haskell y funciones de desvinculación
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
El par tomará pares de elementos y hará 2-tuplas de ellos. Si la lista tiene un número impar de elementos, descartar el último. Desvincular es el reverso del par.
Estos funcionan, pero se preguntan si hay una forma más concisa de escribirlos.
Puede ser un poco prolijo, pero yo diría que gana sin esfuerzo en términos de claridad en comparación con las respuestas hasta el momento. (Sin ánimo de ofender a esos autores.) –
Creo que la conclusión aquí es que una de cada dos funciones en las listas sería útil, ya que las personas gravitan hacia el enfoque zip. El paquete splits en Hackage tiene splitEvery que haría este estilo de solución más perspicuo. – Anthony
Odio decirlo, pero a las alternativas que he visto hasta ahora: dije sucinta, no obtusa.:( – qrest