Herramientas de usuario

Herramientas del sitio


introalg:taller4

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
introalg:taller4 [2006/05/30 14:30] nicolaswintroalg:taller4 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 4: Línea 4:
   * Soluciones en la Wiki: estado.   * Soluciones en la Wiki: estado.
   * Contar frecuencia de palabras.   * Contar frecuencia de palabras.
-  * Como va a ser el parcialito 3 en máquina. 
   * Ejercicios.   * Ejercicios.
-  +  * Como va a ser el parcialito 3 en máquina.   
 ===== Soluciones en la Wiki del Práctico 8: estado ====== ===== Soluciones en la Wiki del Práctico 8: estado ======
 +
 +  * En [[introalg:rincon|Wiki de Scripts Haskell]] ya tenemos casi todos los ejercicios resueltos.
 +  * Probarlos, criticarlos, mejorarlos.
 +  * Hay muchas resoluciones para cada ejercicio, mirarlas y compararlas.
  
 ===== Clase ===== ===== Clase =====
Línea 26: Línea 30:
   espacio :: [Char]   espacio :: [Char]
   espacio = ['\n','\t',' ']   espacio = ['\n','\t',' ']
 +  
   esta :: Eq a => a -> [a] -> Bool   esta :: Eq a => a -> [a] -> Bool
   -- Definirlo!   -- Definirlo!
Línea 57: Línea 61:
   partirPalabras' [] = []   partirPalabras' [] = []
   partirPalabras' st = (tomaPalabra st) : partirPalabras' (tiraEspacio (tiraPalabra st))   partirPalabras' st = (tomaPalabra st) : partirPalabras' (tiraEspacio (tiraPalabra st))
 +
 +Todas estas definciones las metemos en el archivo ''frec.hs''.
 +
 +Notamos:
 +  * La definición de una lista de //caracteres// ''Char''.
 +  * Las tres funciones son muy parecidas en su forma y podríamos **generalizar** con ''tomarHasta'' y ''tirarDesde''.
 +
 +Una vez definida la función ''esta'' podemos probar las funciones.
 +
 +  Main> tomaPalabra "Despues de tres dias"
 +  "Despues"
 +  Main> tiraEspacio "Despues de tres dias"
 +  "Despues de tres dias"
 +  Main> tiraEspacio "           Despues de tres dias"
 +  "Despues de tres dias"
 +  Main> tiraPalabra "           Despues de tres dias"
 +  "           Despues de tres dias"
 +  Main> tiraPalabra "Despues de tres dias"
 +  " de tres dias"
 +
 +
 +  Main> partirPalabras "hola"
 +  ["hola"]
 +  Main> partirPalabras "hola que tal"
 +  ["hola","que","tal"]
 +  Main> partirPalabras "              hola que            tal              "
 +  ["hola","que","tal"]
 +
 +Finalmente tenemos que definir la funcion que computa la frecuencia
 +
 +  frecuencia :: [Palabra] -> [(Palabra,Int)]
 +
 +Por ejemplo
 +
 +  Main> frecuencia ["hola","que","hola"]
 +  [("hola",2),("que",1)]
 +  Main> frecuencia (partirPalabras "Despues de tres dias Nebel decidio aclarar de una vez ese estado de osas, y aprovecho para ello un momento en que Lidia no estaba.")
 +  [("estaba.",1),("no",1),("Lidia",1),("que",1),("en",1),("momento",1),("un",1),("ello",1),("para",1),("aprovecho",1),("y",1),("osas,",1),("de",3),("estado",1),("ese",1),("vez",1),("una",1),("aclarar",1),("decidio",1),("Nebel",1),("dias",1),("tres",1),("Despues",1)]
 +
 +
 +Para probar ejemplos más largos podemos agregar una función que dado el nombre de un archivo, devuelve un ''String'' con ese archivo (tomado de [[http://www.cs.chalmers.se/~rjmh/Teaching/Fysiker/EasyIO.hs|EasyIO.hs]] del curso //Introductory Functional Programming for Physics Students// 8-O) \\
 +Este código debe estar **al inicio del script**.
 +
 +  import IOExts
      
-Para probar ejemplos más largos podemos agregar una función que dado el nombre de un archivo, devuelve un ''String'' con ese archivo (tomado de [[http://www.cs.chalmers.se/~rjmh/Teaching/Fysiker/EasyIO.hs|EasyIO.hs]] del curso //Introductory Functional Programming for Physics Students// 8-O)+  leeArchivo :: String -> String 
 +  leeArchivo nombre = unsafePerformIO$ readFile nombre
  
-Para obtener textos largos interesantes está el [[http://www.gutenberg.org/browse/languages/es|Proyecto Gutemberg-Español]] donde tenemos muchos libros que ya no tienen derecho de copia. \\+Para obtener textos largos interesantes tenemos el [[http://www.gutenberg.org/browse/languages/es|Proyecto Gutemberg-Español]] donde hay muchos libros que ya no tienen derecho de copia. \\
 Por ejemplo están [[http://www.gutenberg.org/files/13507/13507.txt|Cuentos de Amor de Locura y de Muerte]] de Horacio Quiroga y [[http://www.gutenberg.org/etext/14765|El Gaucho Martín Fierro]] de José Hernandez. Por ejemplo están [[http://www.gutenberg.org/files/13507/13507.txt|Cuentos de Amor de Locura y de Muerte]] de Horacio Quiroga y [[http://www.gutenberg.org/etext/14765|El Gaucho Martín Fierro]] de José Hernandez.
  
 Hay que tener cuidado con la **codificación** pues no todas funcionan.\\ Hay que tener cuidado con la **codificación** pues no todas funcionan.\\
-Por ejemplo ''UTF8'' es una codificación posible: {{:introalg:14765-utf8.txt|Martín Fierro en UTF8}}.+Por ejemplo ''UTF8'' es una codificación posible: {{:introalg:14765-utf8.txt|Martín Fierro en UTF8}}, y calculamos la lista de frecuencias. 
 + 
 +  Main> frecuencia (partirPalabras (leeArchivo "14765-utf8.txt"))
  
 ===== Ejercicios ===== ===== Ejercicios =====
  
   * Definir la función ''esta : Eq a => a -> [a] -> Bool'', donde ''esta x xs'' decide si el elemento ''x'' está en la lista ''xs'' (ver práctico 10).   * Definir la función ''esta : Eq a => a -> [a] -> Bool'', donde ''esta x xs'' decide si el elemento ''x'' está en la lista ''xs'' (ver práctico 10).
 +  * Probar las funciones ''tomaPalabra'', ''tiraEspacio'', ''tiraPalabra'' y finalmente ''partirPalabras''.
   * Definir la función ''frecuencia :: [Palabra] -> [(Palabra,Int)]'', que devuelve la frecuencia de cada palabra.   * Definir la función ''frecuencia :: [Palabra] -> [(Palabra,Int)]'', que devuelve la frecuencia de cada palabra.
 Puede ser útil definir la función ''agregarOcurrencia :: Palabra -> [(Palabra,Int)] -> [(Palabra,Int)]'' que dada una palabra y una lista de frecuencias, suma esta palabra a la lista de frecuencias. \\ Puede ser útil definir la función ''agregarOcurrencia :: Palabra -> [(Palabra,Int)] -> [(Palabra,Int)]'' que dada una palabra y una lista de frecuencias, suma esta palabra a la lista de frecuencias. \\
-Por ejemplo+Por ejemplo:
   agregarOcurrencia "que" [("hola",2), ("que",1)] = [("hola",2), ("que",2)]   agregarOcurrencia "que" [("hola",2), ("que",1)] = [("hola",2), ("que",2)]
   agregarOcurrencia "hola" [] = [("hola",1)]   agregarOcurrencia "hola" [] = [("hola",1)]
   agregarOcurrencia "que" [("hola",2)] = [("hola",2), ("que",1)]   agregarOcurrencia "que" [("hola",2)] = [("hola",2), ("que",1)]
 +
 +  * (*) Modificar la función ''ordenar'' para que ordene una lista de pares ''[(Palabra,Int)]'' en su segunda coordenada, y utilizando ''tomar'', obtener las 10 palabras más usadas del //corpus//.
 +  * (* *) 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? ===== ===== ?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.
introalg/taller4.1148999418.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)