introalg:taller2
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:taller2 [2006/05/09 08:22] – nicolasw | introalg:taller2 [2025/11/15 13:47] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 2: | Línea 2: | ||
| ===== Plan para hoy ===== | ===== Plan para hoy ===== | ||
| - | * Repaso de algunas soluciones de la clase anterior | + | * Repaso de algunas soluciones de la clase anterior. |
| - | * Trabajar sobre programas recursivos numéricos y con listas | + | * Sintáxis de //pattern matching//. |
| - | * Sintáxis de //pattern matching// | + | * Trabajar sobre programas recursivos numéricos y con listas. |
| - | * Resolución de ejercicios | + | * Resolución de ejercicios. |
| ===== Algunas soluciones de la clase anterior ====== | ===== Algunas soluciones de la clase anterior ====== | ||
| Línea 13: | Línea 13: | ||
| Notamos | Notamos | ||
| * No hay una única forma de resolver un problema. | * No hay una única forma de resolver un problema. | ||
| - | * Como podemos | + | * Como hacer **control de los parámetros de entrada**. |
| - | * Cláusula '' | + | * Cláusula |
| - | * Comentarios en el código. | + | |
| - | * Uso del '' | + | * Uso del **'' |
| - | * ¿Guardas | + | * ¿**Guardas |
| * No se usaron **definiciones locales** para la función de cálculo de área. | * No se usaron **definiciones locales** para la función de cálculo de área. | ||
| - | Se aprende muchísimo //leyendo detenidamente código bien escrito//. | + | ** Se aprende muchísimo //leyendo detenidamente código bien escrito// |
| ===== Clase ===== | ===== Clase ===== | ||
| - | Hasta ahora vimos programas funcionales **no recursivos**, | + | Hasta ahora vimos programas funcionales **no recursivos**, |
| Veamos la última función no recursiva que vamos a plantear, que sirve para presentar el mecanismo de **pattern matching**. | Veamos la última función no recursiva que vamos a plantear, que sirve para presentar el mecanismo de **pattern matching**. | ||
| Línea 31: | Línea 31: | ||
| Definir la función cabeza: | Definir la función cabeza: | ||
| - | Por ejemplo '' | + | Por ejemplo '' |
| - | El mecanismo básico para poder **destruir** una lista en partes es el //pattern matching//, que es una especie de definición por casos que a su vez es capaz de dividir la lista en su **cabeza** y **cola** | + | El mecanismo básico para poder **destruir** una lista en partes es el //pattern matching//, que podemos pensarlo como una definición por casos, que es capaz de dividir la lista en su **cabeza** y **cola** |
| cabeza :: [a] -> a | cabeza :: [a] -> a | ||
| Línea 51: | Línea 51: | ||
| De la misma forma podemos hacer la función '' | De la misma forma podemos hacer la función '' | ||
| - | También tenemos //pattern matching// numérico. | + | cola :: [a] -> [a] |
| - | Vemos como escribir una funcion que devuelve verdadero si el número es 0 o 1 (puede ser útil para el ejercicio 17) | + | cola (x:xs) = xs |
| + | |||
| + | También tenemos //pattern matching// numérico. | ||
| + | Vemos como escribir una funcion que devuelve verdadero | ||
| ceroOuno :: Int -> Bool | ceroOuno :: Int -> Bool | ||
| Línea 59: | Línea 62: | ||
| ceroOuno x = False | ceroOuno x = False | ||
| - | Ahora tomemos | + | |
| + | ==== Programas Recursivos ==== | ||
| + | |||
| + | Tomemos | ||
| Defina la función duplicar:: | Defina la función duplicar:: | ||
| Ejemplo: duplicar [2,4,8] = [4,8,16] | Ejemplo: duplicar [2,4,8] = [4,8,16] | ||
| - | Usamos un planteamiento inductivo o recursivo y patter | + | Usamos un planteamiento |
| - | * Definir un caso base (lista vacía) | + | * Definir un **caso base** (lista vacía |
| - | * Definir el caso inductivo (la lista tiene al menos un elemento) | + | * Definir el **caso inductivo** (la lista tiene al menos un elemento, siendo el primero '' |
| duplicar :: [Int] -> [Int] | duplicar :: [Int] -> [Int] | ||
| - | duplicar [] = [] | + | duplicar [] = [] -- caso base |
| - | duplicar (x:xs) = 2*x : xs | + | duplicar (x:xs) = 2*x : xs -- caso inductivo |
| Probamos la definición | Probamos la definición | ||
| Línea 79: | Línea 85: | ||
| ¿Donde está el error? | ¿Donde está el error? | ||
| - | Simplemente la " | + | Simplemente |
| Lo arreglamos rápidamente, | Lo arreglamos rápidamente, | ||
| + | |||
| + | Veamos ahora el ejercicio 12. | ||
| + | |||
| + | Defina la función sumatoria: | ||
| + | |||
| + | La estrategia es la misma que en el caso anterior | ||
| + | * Definir caso base para la lista vacía. | ||
| + | * Definir el caso inductivo para la lista con al menos un elemento, suponiendo que ya esta definido para longitudes menores. | ||
| + | |||
| + | sumatoria :: [Int] -> Int | ||
| + | sumatoria [] = 0 | ||
| + | sumatoria (x:xs) = x + sumatoria xs | ||
| + | |||
| + | Vemos algunos ejemplos | ||
| + | |||
| + | Main> sumatoria [1,2,3] | ||
| + | 6 | ||
| + | Main> sumatoria (duplicar (duplicar [1,2,3])) | ||
| + | 24 | ||
| + | Main> sumatoria ((duplicar.duplicar) [1,2,3]) | ||
| + | 24 | ||
| + | |||
| + | Veamos el siguiente código y tratemos de entender que es lo que //computa// | ||
| + | |||
| + | desdeHasta :: Int -> Int -> [Int] | ||
| + | desdeHasta n m | n> | ||
| + | | n==m = [n] | ||
| + | | n< | ||
| + | |||
| + | * ¿A qué evaluaría '' | ||
| + | * ¿Y '' | ||
| + | * Finalmente que pasa exactamente con '' | ||
| + | |||
| + | Notamos que son importantes | ||
| + | * Los nombres de la función y de las variables, pues ayudan a entender su funcionalidad. | ||
| + | * La // | ||
| + | * Una buena // | ||
| Línea 87: | Línea 130: | ||
| Realizar en lo que resta de la clase | Realizar en lo que resta de la clase | ||
| - | * (P8-E7) Definir la función //cola:[A]->[A]// que devuelve todos menos el primer elemento | + | * (P8-E11) Definir la función //multiplicar:[Num]-> Num -> [Num]// que dada una lista y un número //r// multiplica cada uno de los elementos por //r//. Ejemplo // |
| - | * | + | * (P8-E12) Defina |
| + | * (P8-E16) (*) c) Modificar la guarda de '' | ||
introalg/taller2.1147173746.txt.gz · Última modificación: (editor externo)
