[Practico 3] [Ejercicio 6] [Parte b]

[Practico 3] [Ejercicio 6] [Parte b]

de Tiziana Romani Linich -
Número de respuestas: 3

Sea la función split :: [a ] → ([a ], [a ]), que divide la lista en dos listas colocando sus elementos de forma alternada. Por ejemplo split [2, 4, 6, 8, 7] resulta en ([2, 6, 7], [4, 8]). 

 (b) Implemente split usando foldl.

Se me ocurrió la siguiente solución:


split = rv.fst.foldl spL (([ ],[ ]), 0)            Se trata de dos listas con un parámetro que permite saber en cual agregar a continuación


spL (([ ],[ ]) , 0) z = (([z],[ ]) , 1)

spL ((x:xs,[ ]) , 1) z = ((x:xs, [z]) , 2)

spL ((x:xs, y:ys), n) z | even n = ((z:x:xs, y:ys), n+1)

                                  | otherwise = ((x:xs,z:y:ys) , n+1)


rv (xs,ys) = (reverse xs, reverse ys)


Pero spL parece no contemplar todos los casos posibles

*** Exception: <interactive>:19:1-59: Non-exhaustive patterns in function spL


No logro darme cuenta que casos estarían faltando. Si pudieran darme alguna ayuda genial :)
Saludos.


En respuesta a Tiziana Romani Linich

Re: [Practico 3] [Ejercicio 6] [Parte b]

de Marcos Viera - InCo -

Estás segura de que te da ese error?

Yo copié y pegue ese código y me funciona bien...



Adjunto Screenshot from 2019-05-17 13-17-19.png
En respuesta a Marcos Viera - InCo

Re: [Practico 3] [Ejercicio 6] [Parte b]

de Tiziana Romani Linich -

Debe haber algun problema con mi compilador. 

Gracias!

En respuesta a Tiziana Romani Linich

Re: [Practico 3] [Ejercicio 6] [Parte b]

de Juan Pablo García Garland -

Cómo estás implementando?


Se me ocurre que estás definiendo las funciones en una sesión del interprete, puede ser? Haciendo eso efectivamente pude reproducir tu error.


Lo que sucede es que al escribir cada caso del pattern matching de spL estás redefiniendo la función. Queda entonces definida parcial con el último caso.


El intérprete es útil para testear y hacer cierto desarrollo interactivo, pero como con casi todo lenguaje, casi siempre la forma más adecuada de trabajar es escribiendo código en un archivo.