[Ejercicio 4] [Practico 3]

[Ejercicio 4] [Practico 3]

de Javier Agustin Sanchez Burgos -
Número de respuestas: 7

Buen día,

Para este ejercicio me plantee el uso de variables lambda o no, con las mismas me resulta mas intuitivo.

Llegue a:

sumSqsr lst = foldr (\indice resto -> indice*indice + resto) 0 lst
sumSqsl lst = foldl (\resto indice -> indice*indice + resto) 0 lst

--Solución sin uso de variables lambda
sumSqs2r :: Num a => [a] -> a
sumSqs2r = foldr ((+).(^2)) 0

Mi problema esta al tratar de llegar a una implementación sin variables lambda usando foldl. 

Espero la opinión de todos, Saludos!

Adjunto ejer4pr3-pfun.png
En respuesta a Javier Agustin Sanchez Burgos

Re: [Ejercicio 4] [Practico 3]

de Javier Agustin Sanchez Burgos -

Buen día,

Acabo de llegar a una solución usando la función flip, se los dejo por si les sirve.

Seria seguir la misma lógica agregando el uso de esa función para cambiar como toma los parámetros la función ((+).(^2)):

sumSqs2l :: Num a => [a] -> a
sumSqs2l = foldl (flip $ ((+).(^2))) 0

Saludos!

En respuesta a Javier Agustin Sanchez Burgos

Re: [Ejercicio 4] [Practico 3]

de Favio Martin Martinez Freitas -

Buenas Javier! 

Muchas gracias por compartir tu solución!!.

(Ya que estamos aprovecho para compartir la mía :P : 

sumSqsFoldl :: (Num a) => [a] -> a
sumSqsFoldl xs = foldl (+) 0 (map (^2) xs)
)


Saludos, 

Favio. 

En respuesta a Favio Martin Martinez Freitas

Re: [Ejercicio 4] [Practico 3]

de Marcos Viera - InCo -

Hola,


La idea de estos ejercicios es que cuando dice "como foldl" no sea necesario hacer ningún procesamiento sobre la lista que se le pasa al foldl, por lo que la solución debería ser del estilo:

sumSqsFoldl = foldl h e

donde h y e es lo que habría que implementar.


saludos


En respuesta a Javier Agustin Sanchez Burgos

Re: [Ejercicio 4] [Practico 3]

de Agustin Silvano Garcia -

Javier, como estás?


Estuve analizando tu solución y no entiendo cual es la razón de colocar un flip delante de la función compuesta de suma y elevado al cuadrado.


Me podrías ayudar a entender la razón de la utilización de flip?


Saludos.

En respuesta a Agustin Silvano Garcia

Re: [Ejercicio 4] [Practico 3]

de Javier Agustin Sanchez Burgos -
Buen dia,

Considera la lista [1,2,2] la función debería dar 9.
Si ejecutas sin el flip, el caso usando foldl retorna 11, creo que esto se debe a la forma de evaluar que tiene foldl que es de derecha a izquierda.
No se como explicarte con mayor detalle.

Saludos,
Agustin Sanchez