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 12:01] – nicolasw | introalg:taller2 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
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.1147176073.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)