introalg:taller3
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
introalg:taller3 [2006/05/16 12:27] – nicolasw | introalg:taller3 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 2: | Línea 2: | ||
===== Plan para hoy ===== | ===== Plan para hoy ===== | ||
+ | * Revisar algunas soluciones de la Wiki. | ||
+ | * Funciones que toman funciones. | ||
+ | * Casos mas complejos de recursiones con listas. | ||
+ | * Resolución de ejercicios. | ||
+ | * Anuncios varios. | ||
===== Algunas soluciones de la clase anterior ====== | ===== Algunas soluciones de la clase anterior ====== | ||
Veamos algunas soluciones presentadas [[introalg: | Veamos algunas soluciones presentadas [[introalg: | ||
+ | |||
+ | |||
+ | * Función '' | ||
+ | * ¿Lista capicúa recursiva? | ||
+ | * Calificadores de **clase** ('' | ||
+ | * Pattern matching es más general de lo que vimos. | ||
+ | * La lista binaria '' | ||
+ | * Todos los programas se puede hacer en un par de lineas y si no usamos definiciones locales y/o otras funciones que //dividan el problema en partes// ([[http:// | ||
+ | | ||
===== Clase ===== | ===== Clase ===== | ||
Línea 11: | Línea 25: | ||
Veamos el ejercicio 18 | Veamos el ejercicio 18 | ||
+ | ----- | ||
Defina la función //paraTodo: (A-> Bool)-> [A]-> Bool//, donde // | Defina la función //paraTodo: (A-> Bool)-> [A]-> Bool//, donde // | ||
+ | ----- | ||
Nuevamente esta función es el típico caso que se resuelve con un caso base y un caso inductivo | Nuevamente esta función es el típico caso que se resuelve con un caso base y un caso inductivo | ||
Línea 70: | Línea 86: | ||
[(" | [(" | ||
- | Esta función requiere inducción en dos listas al mismo tiempo, por lo tanto tenemos el //pattern matching// tendrá ahora 4 casos. | + | Esta función requiere inducción en dos listas al mismo tiempo, por lo tanto tenemos el //pattern matching// tendrá ahora **4 casos**. |
* Caso(s) base(s) | * Caso(s) base(s) | ||
Línea 89: | Línea 105: | ||
¿Cuál es el problema? \\ | ¿Cuál es el problema? \\ | ||
- | Tenemos un problema de tipos, el tipo de la función //no es lo suficientemente general//. | + | Tenemos un problema de tipos, el tipo de la función //no es lo suficientemente general//. \\ |
+ | Lo corregimos para que sea '' | ||
+ | |||
+ | Usando las ideas de este ejemplo podemos resolver los ejercicios 21 y 22 del práctico 8. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | Generalicemos las funciones '' | ||
+ | |||
+ | duplicar :: [Int] -> [Int] | ||
+ | duplicar [] = [] | ||
+ | duplicar (x:xs) = x*2 : duplicar xs | ||
+ | |||
+ | multiplicar :: [Int] -> Int -> [Int] | ||
+ | multiplicar [] a = [] | ||
+ | multiplicar (x:xs) a = x*a : multiplicar xs a | ||
+ | |||
+ | La estructura es la misma, estamos aplicando una función a cada elemento de la lista.\\ | ||
+ | El ejercicio 24 dice: | ||
+ | |||
+ | ----- | ||
+ | a) Defina la función //mapear:(A -> B) -> [A] -> [B]// que dadas una función //f// y una lista //xs//, aplica //f// a cada elemento de la lista.\\ | ||
+ | Ejemplo: // | ||
+ | ----- | ||
+ | |||
+ | Tenemos nuevamente una **función de alto orden** y su definición es bien sencilla, con los dos casos (vacía y al menos un elemento) alcanza. | ||
+ | |||
+ | mapear :: (a->b) -> [a] -> [b] | ||
+ | mapear f [] = [] | ||
+ | mapear f (x:xs) = f x : mapear f xs | ||
+ | |||
+ | Ahora '' | ||
+ | |||
+ | Main> mapear (*2) [1,2,3] | ||
+ | [2,4,6] | ||
+ | |||
+ | Podemos definir '' | ||
+ | |||
+ | duplica' | ||
+ | |||
+ | Vemos como funciona haciendo los pasos de reducción de '' | ||
+ | |||
+ | * Gracias a la // | ||
+ | * Notación muy compacta y legible. | ||
===== Ejercicios ===== | ===== Ejercicios ===== | ||
- | * (P8,E19) Usando '' | + | * (P8,E19) Usando '' |
- | Pruebe con los siguientes primos: 7, 73, 739, 7393, 73939, 739391, 7393913, [[http:// | + | |
* (P8,E21) Defina la función '' | * (P8,E21) Defina la función '' | ||
- | * (P8, | + | * (P8, |
+ | * (P8,E24) Defina la la función '' | ||
+ | |||
+ | ===== Anuncios ===== | ||
+ | |||
+ | * La proxima clase (martes 23 de Mayo) habrá practica supervisada de taller. | ||
+ | * Vamos a evaluar el taller, como un parcialito más. |
introalg/taller3.1147782463.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)