Duda composicion de funciones

Duda composicion de funciones

de Ignacio Carlos Monzalvo Milan -
Número de respuestas: 4

Buenas, con un companero estabamos haciendo el parcial del año pasado y nos surgio una duda en el siguiente caso:


Teniendo la siguiente linea:


(head (((:) . head) [1] foldr ((:) . head) [] (map(1:) map(1:) as)))


Entendemos que la composicion de funciones ((:) . head) tomara como entrada el valor [1] y luego lo concatenara con el segundo argumento.


Lo que no nos queda claro es por que esa composicion de funciones no "intenta" agarrar los dos parametros a la vez (lo cual terminaria en un error)

En respuesta a Ignacio Carlos Monzalvo Milan

Re: Duda composicion de funciones

de Marcos Viera - InCo -
Cómo obtuvieron ese código? Me parece que faltan algunos paréntesis. Pueden pasarme el código original y los pasos que dieron para llegar hasta ahí?
En respuesta a Marcos Viera - InCo

Re: Duda composicion de funciones

de Ignacio Carlos Monzalvo Milan -

Es el ejercicio 10)d) del parcial de 2019.

Me di cuenta que en el codigo que puse arriba faltaba un parentesis, pero seguimos sin entender bien. Estos son los pasos para llegar hasta ahi:


(head (foldr ((:) . head) [] (tail as)))

(head (foldr ((:) . head) [] (tail [] : map(1:) as)))

(head (foldr ((:) . head) [] (map (1:) as)))

(head (foldr ((:) . head) [] (map (1:) [] : map(1:) as)))

(head (foldr ((:) . head) [] ([1] : map(1:) map(1:) as)))


Luego, por definicion de foldr:

(head (((:) . head) [1] foldr ((:) . head) [] (map(1:) map(1:) as)))

En respuesta a Ignacio Carlos Monzalvo Milan

Re: Duda composicion de funciones

de Marcos Viera - InCo -
Te corrijo un poco los paréntesis en la deducción:
 
(head (foldr ((:) . head) [] (tail as)))
(head (foldr ((:) . head) [] (tail ([] : map (1:) as))))
(head (foldr ((:) . head) [] (map (1:) as)))
(head (foldr ((:) . head) [] (map (1:) ([] : map (1:) as))))
(head (foldr ((:) . head) [] ([1] : map (1:) (map (1:) as))))
(head (((:) . head) [1] (foldr ((:) . head) [] (map (1:) (map (1:) as)))))


como la aplicación asocia hacia la izquierda, la expresión final es equivalente a:
 
( (head (((:) . head) [1] ) (foldr ((:) . head) [] (map (1:) (map (1:) as)))))


Queda claro así?