Ejercicio 6 - Parcial 2019

Ejercicio 6 - Parcial 2019

de Maximiliano Bakkalian Lapachian -
Número de respuestas: 3

Buenas,


No me queda claro porque la opcion  foo [ ] "hola" al evaluarlo no es "hola", si foo [] = id y al evaluar id "hola"en Prelud me da "hola"

Y no me queda claro que la opcion que dieron como correcta (bar [1, 2, −4, 3, −8])  = 5 si lo sea. 

Si vemos la definicion de bar xs = foo xs 0, entiendo que foo [1, 2, −4, 3, −8] si retorna la composicion de funciones id . (+1) . (+1) . (+1) . (+1) . (+1) pero para poder aplicar esta composicion a 0 entiendo que bar deberia ser:


bar xs = (foo xs) 0  o  bar xs = foo xs $ 0 o sea que para aplicar la composicion de funciones a 0 tienen que estar envueltas en () o utilizando la funcion $ para aplicar la funcion a el argumento 0.

Porque hacer : id . (+1) . (+1) . (+1) . (+1) . (+1) 0  el ultimo (+1) no estaria tomando el 0 como argumento y eso no retorna un valor en vez de la funcion que tiene que tomar la composicion? Esto no seria un error de ejecucion?

Espero que se entienda mi duda.

Saludos

En respuesta a Maximiliano Bakkalian Lapachian

Re: Ejercicio 6 - Parcial 2019

de Marcos Viera - InCo -

No se puede evaluar (foo [] "hola") porque el segundo parámetro de foo tiene que ser un numérico.

Poner

bar xs = foo xs 0

es igual que poner

bar xs = (foo xs) 0

porque la aplicación asocia a la izquierda.

En respuesta a Marcos Viera - InCo

Re: Ejercicio 6 - Parcial 2019

de Guillermo Zorron Bordone -

Por qué el segundo parámetro de foo tiene que ser numérico? Si en la definición de foo en el pattern matching definido sólo aparecen listas?

En respuesta a Guillermo Zorron Bordone

Re: Ejercicio 6 - Parcial 2019

de Juan Pablo García Garland -

La segunda cláusula que define f es

f (x:xs) = foo xs . (+1)

Por lo tanto el resultado de foo xs tiene que ser un numérico (por la composición con (+1)).

El tipo de foo en este ejercicio es Num a ⇒ [b] → a → a