[Practico 2][Ejercicio 12]

[Practico 2][Ejercicio 12]

de Martin Vigliarolo Oyarzabal -
Número de respuestas: 2

Buenas,

la unica manera que encontre de hacer este ejercicio fue definiendo box de la siguiente manera:

filter` p = concat . map box
            where box (x:[]) = if (p x) == True then [x] else []
                       box (x:xs) = if (p x) == True then [x] ++ box xs else box xs

Pero en este caso, el tipo de filter` es:  (a -> Bool) -> [[a]] -> [a]

No le encuentro la vuelta, agradezco cualquier mano que me tiren

En respuesta a Martin Vigliarolo Oyarzabal

Re: [Practico 2][Ejercicio 12]

de Alberto Pardo -

Hola,

Digamos que esta bien "la idea" pero no es correcto lo que estas escribiendo. 

Varias cosas para guiarte. 

Primero analiza que tipo tiene que tener box para que la definición concat . map box tome una lista de tipo [a] y retorne una lista de tipo [a]. 

Sabes que el map box toma una lista de tipo [a] y bueno, falta ver una lista de que tipo retorna. 

Por otro lado sabemos que concat :: [[a]] -> a

Una vez que tengas el tipo de box determinado te va a quedar mas claro como definirlo. Como te decia, estas bien rumbeado con la idea que estabas usando. Tene en cuenta que, por como trabaja map, box es aplicada individualmente a cada elemento de la lista de entrada (no a toda la lista junta). 

Espero que estos datos te ayuden.

Saludos,
Alberto