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:57] – 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:: | ||
| Línea 65: | Línea 71: | ||
| Usamos un planteamiento //inductivo o recursivo// y //pattern matching// para | Usamos un planteamiento //inductivo o recursivo// y //pattern matching// para | ||
| - | * 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] | ||
| 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, | ||
| Línea 87: | Línea 93: | ||
| La estrategia es la misma que en el caso anterior | La estrategia es la misma que en el caso anterior | ||
| - | * Definir caso base para la lista vacía | + | * 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. | * Definir el caso inductivo para la lista con al menos un elemento, suponiendo que ya esta definido para longitudes menores. | ||
| sumatoria :: [Int] -> Int | sumatoria :: [Int] -> Int | ||
| sumatoria [] = 0 | sumatoria [] = 0 | ||
| - | sumatoria (x:xs) = x+sumatoria xs | + | sumatoria (x:xs) = x + sumatoria xs |
| Vemos algunos ejemplos | Vemos algunos ejemplos | ||
| Línea 111: | Línea 117: | ||
| * ¿A qué evaluaría '' | * ¿A qué evaluaría '' | ||
| - | * Y '' | + | * ¿Y '' |
| - | * Finalmente que pasa exactamente con '' | + | * Finalmente que pasa exactamente con '' |
| Notamos que son importantes | Notamos que son importantes | ||
| - | * Los nombres de la función y de las variables. | + | * Los nombres de la función y de las variables, pues ayudan a entender su funcionalidad. |
| * La // | * La // | ||
| - | * Una buena // | + | * Una buena // |
| Línea 126: | Línea 132: | ||
| * (P8-E11) Definir la función // | * (P8-E11) Definir la función // | ||
| * (P8-E12) Defina la función promedio // | * (P8-E12) Defina la función promedio // | ||
| - | * (P8-E16) c) Modificar la guarda de '' | + | * (P8-E16) (*) c) Modificar la guarda de '' |
introalg/taller2.1147175860.txt.gz · Última modificación: (editor externo)
