¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Clase 4
Plan para hoy
- Soluciones en la Wiki: estado.
- Contar frecuencia de palabras.
- Como va a ser el parcialito 3 en máquina.
- Ejercicios.
Soluciones en la Wiki del Práctico 8: estado
Clase
Nos proponemos hacer un programa funcional que cuente la frecuencia de las ocurrencias de palabras.
frecuencia :: [Palabra] -> [(Palabra,Int)]
Main> frecuencia ["hola","que","hola"] [("hola",2),("que",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 EasyIO.hs del curso Introductory Functional Programming for Physics Students )
Para obtener textos largos interesantes está el Proyecto Gutemberg-Español donde tenemos muchos libros que ya no tienen derecho de copia.
Por ejemplo están Cuentos de Amor de Locura y de Muerte de Horacio Quiroga y El Gaucho Martín Fierro de José Hernandez.
Hay que tener cuidado con la codificación pues no todas funcionan.
Por ejemplo UTF8
es una codificación posible: Martín Fierro en UTF8.
Ejercicios
- Definir la función
esta : Eq a ⇒ a → [a] → Bool
, dondeesta x xs
decide si el elementox
está en la listaxs
(ver práctico 10). - 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.
Por ejemplo
agregarOcurrencia "que" [("hola",2), ("que",1)] = [("hola",2), ("que",2)] agregarOcurrencia "hola" [] = [("hola",1)] agregarOcurrencia "que" [("hola",2)] = [("hola",2), ("que",1)]