introalg:taller07_4
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:taller07_4 [2007/05/15 01:31] – nicolasw | introalg:taller07_4 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Clase 4 ====== | ====== Clase 4 ====== | ||
+ | |||
Línea 75: | Línea 76: | ||
=== Ejercicio === | === Ejercicio === | ||
- | * Utilizando aplicación parcial en //(/=)//, definir la función //noEsCero :: Int -> Bool// que decide si un entero //x// es distinto a 0. | + | * Utilizando aplicación parcial en //( /= )//, definir la función //noEsCero :: Int -> Bool// que decide si un entero //x// es distinto a 0. |
===== Generalización de las funciones vistas (map, filter, fold) ===== | ===== Generalización de las funciones vistas (map, filter, fold) ===== | ||
+ | |||
+ | |||
Línea 92: | Línea 95: | ||
?No estamos ya cansados de escribir siempre lo mismo? | ?No estamos ya cansados de escribir siempre lo mismo? | ||
- | Veamos solo algunas de las funciones de //tipo aplicación//, | + | Las funciones de //tipo aplicación//, |
< | < | ||
Línea 101: | Línea 104: | ||
< | < | ||
- | veintePorCiento : [Float] -> [Float] | + | veintePorCiento |
veintePorCiento [] = [] | veintePorCiento [] = [] | ||
veintePorCiento (x:xs) = 0.2*x : veintePorCiento xs | veintePorCiento (x:xs) = 0.2*x : veintePorCiento xs | ||
Línea 123: | Línea 126: | ||
Entonces **generalizemos** definiendo una función que toma como primer argumento la función que se aplicará a cada elemento de la lista. | Entonces **generalizemos** definiendo una función que toma como primer argumento la función que se aplicará a cada elemento de la lista. | ||
- | Esta función es la primera que crearemos donde utilizamos | + | Vemos nuevamente |
- | Se dice que en Haskell las funciones son // | + | De nuevo, se dice que en Haskell las funciones son // |
Esto no ocurre en la mayoría de los //lenguajes imperativos// | Esto no ocurre en la mayoría de los //lenguajes imperativos// | ||
Línea 136: | Línea 139: | ||
=== Ejercicio === | === Ejercicio === | ||
- | * Definir la función //mapNumero.f.xs//, //mapNumero | + | * Definir la función //mapNumeros.f.xs//, //mapNumeros |
probar con mapNumeros.(*2).[0, | probar con mapNumeros.(*2).[0, | ||
+ | |||
Línea 148: | Línea 152: | ||
< | < | ||
esPar :: Int -> Bool | esPar :: Int -> Bool | ||
- | esPar x = x `mod` 2 == 0 | + | esPar = esDivisor |
soloPares :: [Int] -> [Int] | soloPares :: [Int] -> [Int] | ||
Línea 173: | Línea 177: | ||
probar con filtraNumeros.entre0y9.[], | probar con filtraNumeros.entre0y9.[], | ||
+ | |||
+ | |||
Línea 192: | Línea 198: | ||
productoria :: [Int] -> Int | productoria :: [Int] -> Int | ||
- | productoria [] | + | productoria [] |
productoria (x:xs) = producto x (productoria xs) | productoria (x:xs) = producto x (productoria xs) | ||
</ | </ | ||
Línea 200: | Línea 206: | ||
concatenaInt :: [[Int]] -> [Int] | concatenaInt :: [[Int]] -> [Int] | ||
concatenaInt [] = [] | concatenaInt [] = [] | ||
- | concatenaInt (xs:xss) = xs ++ concatenaInt xss | + | concatenaInt (xs:xss) = (++) xs (concatenaInt xss) |
</ | </ | ||
Línea 234: | Línea 240: | ||
< | < | ||
- | mapa : (a -> b) -> [a] -> [b] | + | mapa :: (a -> b) -> [a] -> [b] |
mapa f [] = | mapa f [] = | ||
mapa f (x:xs) = | mapa f (x:xs) = | ||
Línea 300: | Línea 306: | ||
===== Reescribiendo funciones usando map, fold y filter ===== | ===== Reescribiendo funciones usando map, fold y filter ===== | ||
+ | |||
+ | |||
+ | |||
==== Ejercicios ==== | ==== Ejercicios ==== | ||
* Escribir // | * Escribir // | ||
+ | * Reescribir ambas utilizando aplicación parcial sobre //mapa// para evitar escribir el argumento de la lista. | ||
+ | * Utilizando //mapa// escribir la función //largos :: [String] -> [Int]// que dada una lista de cadenas, retorna la lista con la longitud de cada una. | ||
* Escribir // | * Escribir // | ||
+ | * Reescribir ambas utilizando aplicación parcial sobre //mapa// para evitar escribir el argumento de la lista. | ||
+ | * Escribir // | ||
+ | * Escribir // | ||
* Escribir // | * Escribir // | ||
* Escribir // | * Escribir // | ||
* Escribir //reversa// usando // | * Escribir //reversa// usando // | ||
- | * **DIFÍCIL** Escribir //mapa// y //filtro// usando // | + | * **(DIFÍCIL)** Escribir //mapa// y //filtro// usando // |
introalg/taller07_4.1179192664.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)