[Práctico 3][Ej 9] Función decimal como foldl

[Práctico 3][Ej 9] Función decimal como foldl

de Pablo Dalchiele Gonzalez -
Número de respuestas: 1

Buenas, en este ejercicio la parte de resolver con recursión explícita, la hice así

decimal :: [Int] -> Int
decimal = snd . parseo
             where
               parseo [x] = (1, x)
               parseo (x:y:xs) = (e+1, x * 10 ^ e + s)
                   where
                     (e, s) = parseo (y:xs)


donde parseo va contando en la primer componente de la tupla cuantas veces entró en la recursión, para saber a cuanto elevar la potencia de 10, y a su vez aprovecho para devolver en s la suma de los dígitos menos significativos, por ejemplo en [1,2,5] cuando está en 1 el llamado recursivo le devuelve en la primer componente el exponente 2 y en la segunda componente le devuelve 25 y hace 1 * 10^2 + 25.

Ahora, la parte que pide hacerlo como foldl no me doy cuenta, dado que foldl va consumiendo la lista de izquierda a derecha, no tengo forma de obtener información del último elemento y pasarselo al primero, si pudiera hacerlo usando foldl tal vez pero como foldl (o sea usando exclusivamente foldl y nada más) no se me ocurre.

Agradezco cualquier ayuda!

En respuesta a Pablo Dalchiele Gonzalez

Re: [Práctico 3][Ej 9] Función decimal como foldl

de Marcos Viera - InCo -

Probá hacer la parte de recursión explícita sin usar potencias. Para esto es útil recordar el método de Horner:

a0 + a1 x + a2 x2  + ... + an xn  =  a0 + x (a1 + x (a2 + ...  + x an .. ))