Parcial 2022, 1era instancia, ejercicio 7

Re: Parcial 2022, 1era instancia, ejercicio 7

de Marcos Viera - InCo -
Número de respuestas: 0
Siempre intento reducir la aplicación más externa, si no puedo, me meto a reducir sus argumentos (de izquierda a derecha) hasta llegar a un estado en el que pueda reducir.
Para ver si puede quedar claro, voy poner las reducciones que hiciste, comentando qué se intentaría hacer en cada paso:

head (foldr ((:) . head) [] (tail cs))
- no puedo reducir head, entonces reduzco su argumento hasta poder
- no puedo reducir foldr, entonces reduzco sus argumentos (de izquierda a derecha)
- la composición no se puede reducir, tampoco []
- reduzco tail
head (foldr ((:) . head) [] (tail ([1,1]:map (\(x:y:xs) -> x+y:x:y:xs) cs)))
== head (foldr ((:) . head) [] (map (\(x:y:xs) -> x+y:x:y:xs) cs))
- sigo sin poder reducir head
- sigo sin poder reducir foldr
- la composición no se puede reducir, tampoco []
- reduzco map
head (foldr ((:) . head) [] (map (\(x:y:xs) -> x+y:x:y:xs) cs))
== head (foldr ((:) . head) [] (map (\(x:y:xs) -> x+y:x:y:xs) ([1,1]:map (\(x:y:xs) -> x+y:x:y:xs) cs)))
== head (foldr ((:) . head) [] ([2,1,1]:map (\(x:y:xs) -> x+y:x:y:xs) (map (\(x:y:xs) -> x+y:x:y:xs) cs)))
- sigo sin poder reducir head
- puedo reducir el foldr
head (foldr ((:) . head) [] ([2,1,1]:map (\(x:y:xs) -> x+y:x:y:xs) (map (\(x:y:xs) -> x+y:x:y:xs) cs)))
== head (((:) . head) [2,1,1] (foldr ((:) . head) [] (map (\(x:y:xs) -> x+y:x:y:xs) (map (\(x:y:xs) -> x+y:x:y:xs) cs))))
- sigo sin poder reducir head
- tengo la aplicación de la composición a [2,1,1] y su resultado luego se aplicaría al foldr. reduzco la aplicación
head (((:) . head) [2,1,1] (foldr ((:) . head) [] (map (\(x:y:xs) -> x+y:x:y:xs) (map (\(x:y:xs) -> x+y:x:y:xs) cs))))
== head (2 : (foldr ((:) . head) [] (map (\(x:y:xs) -> x+y:x:y:xs) (map (\(x:y:xs) -> x+y:x:y:xs) cs))))
...

saludos