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 09:27] – nicolasw | introalg:taller3 [2025/11/15 13:47] (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: (editor externo)
