introalg:taller4
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previa | |||
introalg:taller4 [2006/05/30 15:03] – nicolasw | introalg:taller4 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ====== Clase 4 ====== | ||
+ | ===== Plan para hoy ===== | ||
+ | * Soluciones en la Wiki: estado. | ||
+ | * Contar frecuencia de palabras. | ||
+ | * Ejercicios. | ||
+ | * Como va a ser el parcialito 3 en máquina. | ||
+ | |||
+ | ===== Soluciones en la Wiki del Práctico 8: estado ====== | ||
+ | |||
+ | * En [[introalg: | ||
+ | * Probarlos, criticarlos, | ||
+ | * Hay muchas resoluciones para cada ejercicio, mirarlas y compararlas. | ||
+ | |||
+ | ===== Clase ===== | ||
+ | |||
+ | Nos proponemos hacer un programa funcional que **cuente la frecuencia de las ocurrencias de palabras**. | ||
+ | |||
+ | frecuencia :: [Palabra] -> [(Palabra, | ||
+ | |||
+ | Main> frecuencia [" | ||
+ | [(" | ||
+ | |||
+ | Donde '' | ||
+ | |||
+ | type Palabra = String | ||
+ | |||
+ | Para hacer más fácil el uso de esta función tomamos de [[http:// | ||
+ | |||
+ | espacio :: [Char] | ||
+ | espacio = [' | ||
+ | | ||
+ | esta :: Eq a => a -> [a] -> Bool | ||
+ | -- Definirlo! | ||
+ | | ||
+ | -- Tambien podemos escribirlo como tomaPalabra :: [Char] -> [Char] | ||
+ | tomaPalabra :: String -> String | ||
+ | tomaPalabra [] = [] | ||
+ | tomaPalabra (x: | ||
+ | | otherwise | ||
+ | | ||
+ | | ||
+ | tiraPalabra :: String -> String | ||
+ | tiraPalabra [] = [] | ||
+ | tiraPalabra (x: | ||
+ | | otherwise | ||
+ | | ||
+ | | ||
+ | tiraEspacio :: String -> String | ||
+ | tiraEspacio [] = [] | ||
+ | tiraEspacio (x: | ||
+ | | otherwise | ||
+ | | ||
+ | -- Declaracion de tipos | ||
+ | type Palabra = String | ||
+ | | ||
+ | partirPalabras :: String -> [Palabra] | ||
+ | partirPalabras st = partirPalabras' | ||
+ | | ||
+ | partirPalabras' | ||
+ | partirPalabras' | ||
+ | partirPalabras' | ||
+ | |||
+ | Todas estas definciones las metemos en el archivo '' | ||
+ | |||
+ | Notamos: | ||
+ | * La definición de una lista de // | ||
+ | * Las tres funciones son muy parecidas en su forma y podríamos **generalizar** con '' | ||
+ | |||
+ | Una vez definida la función '' | ||
+ | |||
+ | Main> tomaPalabra " | ||
+ | " | ||
+ | Main> tiraEspacio " | ||
+ | " | ||
+ | Main> tiraEspacio " | ||
+ | " | ||
+ | Main> tiraPalabra " | ||
+ | " | ||
+ | Main> tiraPalabra " | ||
+ | " de tres dias" | ||
+ | |||
+ | |||
+ | Main> partirPalabras " | ||
+ | [" | ||
+ | Main> partirPalabras "hola que tal" | ||
+ | [" | ||
+ | Main> partirPalabras " | ||
+ | [" | ||
+ | |||
+ | Finalmente tenemos que definir la funcion que computa la frecuencia | ||
+ | |||
+ | frecuencia :: [Palabra] -> [(Palabra, | ||
+ | |||
+ | Por ejemplo | ||
+ | |||
+ | Main> frecuencia [" | ||
+ | [(" | ||
+ | Main> frecuencia (partirPalabras " | ||
+ | [(" | ||
+ | |||
+ | |||
+ | Para probar ejemplos más largos podemos agregar una función que dado el nombre de un archivo, devuelve un '' | ||
+ | Este código debe estar **al inicio del script**. | ||
+ | |||
+ | import IOExts | ||
+ | | ||
+ | leeArchivo :: String -> String | ||
+ | leeArchivo nombre = unsafePerformIO$ readFile nombre | ||
+ | |||
+ | Para obtener textos largos e interesantes tenemos el [[http:// | ||
+ | Por ejemplo están [[http:// | ||
+ | |||
+ | Hay que tener cuidado con la **codificación** pues no todas funcionan.\\ | ||
+ | Por ejemplo '' | ||
+ | |||
+ | Main> frecuencia (partirPalabras (leeArchivo " | ||
+ | |||
+ | ===== Ejercicios ===== | ||
+ | |||
+ | * Definir la función '' | ||
+ | * Probar las funciones '' | ||
+ | * Definir la función '' | ||
+ | Puede ser útil definir la función '' | ||
+ | Por ejemplo: | ||
+ | agregarOcurrencia " | ||
+ | agregarOcurrencia " | ||
+ | agregarOcurrencia " | ||
+ | |||
+ | * (*) Modificar la función '' | ||
+ | * (* *) Modificar el programa para que tome un **parámetro de entrada** con el nombre del archivo y devuelva la tabla de frecuencias ordenadas de mayor a menor. | ||
+ | |||
+ | ===== ?Como será el parcialito 3 en máquina? ===== | ||
+ | * Ejercicios sencillos del tipo que estuvimos trabajando en clase. | ||
+ | * Se evalua la corrección de la solucion y tienen que explicar como funciona. | ||
+ | * Como siempre se (A)prueba o (N)Desaprueba. | ||
+ | * Cada uno en su turno. |