[Practico 4] [Ejercicio 1] [Parte b]

[Practico 4] [Ejercicio 1] [Parte b]

de Federico Matonte Martinez -
Número de respuestas: 3

Estoy algo atorado con como usar el foldN para las funciones exp2, suma y predecesor.

Dejando de lado el usar una función Nat2Int realizar las operaciones deseadas como Int y luego aplicar la función int2Nat implementada con el foldN, que supongo no es a lo que va el ejercicio.

Para el exp2, puede que haya que utilizar alguna formula matemática que relacione una sumatoria con la potencia en base 2?

Para el suma debería crear mi propio foldNN para pares de Nats?

Y para el predecesor ni siquiera se me ocurre que hacer, por que no creo que pueda indicarle al  foldN que deje de foldear al llegar a Succ(Zero).


En respuesta a Federico Matonte Martinez

Re: [Practico 4] [Ejercicio 1] [Parte b]

de Marcos Viera - InCo -

> Para el exp2, puede que haya que utilizar alguna formula matemática que relacione una sumatoria con la potencia en base 2?

Te alcanza con saber que 2n+1 = 2 . 2n


> Para el suma debería crear mi propio foldNN para pares de Nats? 

No es necesario, dado que la suma se puede definir haciendo recursión sólo uno de los operandos


> Y para el predecesor ni siquiera se me ocurre que hacer, por que no creo que pueda indicarle al  foldN que deje de foldear al llegar a Succ(Zero).

Este es el más complicado. La pista es que, si usamos la terminología definida en el práctico anterior, esta parte se resuelve "usando" foldN y no "como" foldN. Tené en cuenta que en el caso (S n) no tenés disponible n, pero sí podés reconstruirlo en la recursión.


En respuesta a Marcos Viera - InCo

Re: [Practico 4] [Ejercicio 1] [Parte b]

de Martin Pacheco -

Yo en la parte (b) haciendo uso de foldN logré definirme todas las funciones de la parte (a) usando una única linea de definición, es decir sin usar pattern matching, directamente para valores genéricos como parámetros (O como dicen en los prácticos y menciona Marcos en el post anterior, definido "como" foldN).
Pero para el único que no pude hacerlo de esa manera fue para predecesor.
Se que si separo en dos casos, es decir: Zero y (Succ n) es relativamente viable de definir.

Pero me gustaría saber si es posible (o alguien encontró la forma) de definir predecesor con una única linea.