Aplicación y composición de funciones

Aplicación y composición de funciones

de Ernesto Gerez Blanco -
Número de respuestas: 1

Buenas. A partir de un ejercicio de repaso se me ocurrió verificar si

foldr (\a b -> (a - b) * 2) 0 == foldr ((*2).(-)) 0

Para esto escribi la función

equifold l = foldr (\a b -> (a - b) * 2) 0 l == foldr ((*2).(-)) 0 l

Además de que la función no compila y aún no se porqué, me surgió un problema más "primitivo".

Usando el ghci intenté aplicar (*2).(-) 2 3 y falló, pero ((*2).(-) 2) 3 si funcionó.

Tenía entendido que las dos expresiones son equivalentes porque la aplicación de funciones asocia a la izquierda. No se qué se me está escapando.


Gracias

En respuesta a Ernesto Gerez Blanco

Re: Aplicación y composición de funciones

de Marcos Viera - InCo -

Hola,

Sobre el problema "primitivo" lo que sucede es que la aplicación de funciones tiene mayor precedencia que cualquier operador infijo, particularmente que (.). Por lo tanto

(*2) . (-) 2 3

equivale a:

(*2) . (((-) 2) 3)

Sobre tu problema inicial, además de que aplica lo que te mostré recién. Fijate cuál es el tipo de:

((*2).(-))