introalg:taller07_5
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_5 [2007/05/28 23:48] – nicolasw | introalg:taller07_5 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 114: | Línea 114: | ||
* Utilizando aplicaciones, | * Utilizando aplicaciones, | ||
* ¿Cuáles son el // | * ¿Cuáles son el // | ||
+ | |||
+ | |||
Línea 150: | Línea 152: | ||
encuentraEstafador [] _ = [] | encuentraEstafador [] _ = [] | ||
encuentraEstafador (x:xs) ys | existe (==x) ys = x : encuentraEstafador xs ys | encuentraEstafador (x:xs) ys | existe (==x) ys = x : encuentraEstafador xs ys | ||
- | | otherwise | + | | otherwise |
Esta versión es poco eficiente porque para cada elemento de la primera lista tenemos que recorrer toda la segunda lista. Sin embargo, si suponemos que las listas están ordenadas, podríamos aprovechar este hecho para recorrerlas a ambas de forma más eficiente. | Esta versión es poco eficiente porque para cada elemento de la primera lista tenemos que recorrer toda la segunda lista. Sin embargo, si suponemos que las listas están ordenadas, podríamos aprovechar este hecho para recorrerlas a ambas de forma más eficiente. | ||
- | ===Ejercicios=== | + | |
+ | ====Ejercicios==== | ||
* Definir //iguales :: Eq a => [a] -> [a] -> Bool// que decide si dos listas son iguales. | * Definir //iguales :: Eq a => [a] -> [a] -> Bool// que decide si dos listas son iguales. | ||
- | * Definir // | + | * Definir // |
* Activar con '': | * Activar con '': | ||
* Supongamos ahora que el listado de las personas que reciben subsidio por desempleo es una lista de tuplas // | * Supongamos ahora que el listado de las personas que reciben subsidio por desempleo es una lista de tuplas // | ||
Línea 166: | Línea 169: | ||
listadoMuni = [(" | listadoMuni = [(" | ||
</ | </ | ||
+ | |||
===== Manejando cosas más complejas ===== | ===== Manejando cosas más complejas ===== | ||
Línea 187: | Línea 191: | ||
< | < | ||
-- extensión para poder leer archivos en Strings | -- extensión para poder leer archivos en Strings | ||
- | import IOExts | + | import |
-- constante principal con el grafo de la web. | -- constante principal con el grafo de la web. | ||
Línea 195: | Línea 199: | ||
-- carga un archivo en un String, usa IOExts | -- carga un archivo en un String, usa IOExts | ||
leeArchivo :: String -> String | leeArchivo :: String -> String | ||
- | leeArchivo nombre = unsafePerformIO$ readFile nombre | + | leeArchivo nombre = unsafePerformIO $ readFile nombre |
-- transforma el contenido del archivo de String a lista de tuplas | -- transforma el contenido del archivo de String a lista de tuplas | ||
Línea 203: | Línea 207: | ||
where | where | ||
fuente = takeWhile (not.esSeparador) xs | fuente = takeWhile (not.esSeparador) xs | ||
- | todoMenosFuente = drop 1 (dropWhile (not.esSeparador) xs) | + | todoMenosFuente = dropWhile esSeparador |
destino = takeWhile (not.esFinLinea) todoMenosFuente | destino = takeWhile (not.esFinLinea) todoMenosFuente | ||
- | resto = drop 1 (dropWhile (not.esFinLinea) todoMenosFuente) | + | resto = dropWhile esFinLinea |
esSeparador, | esSeparador, | ||
- | esSeparador x = x=='|' | + | esSeparador x = elem x "| " |
- | esFinLinea | + | esFinLinea |
</ | </ | ||
Línea 224: | Línea 228: | ||
Main> take 32 (map fst webGraph) | Main> take 32 (map fst webGraph) | ||
[" | [" | ||
- | |||
Línea 232: | Línea 235: | ||
Vamos a desarrollar diferentes funciones para obtener información de esta lista. | Vamos a desarrollar diferentes funciones para obtener información de esta lista. | ||
- | * Antes que nada necesitamos | + | * Determinar cuales y cuantas páginas se apuntan a si mismas. |
+ | * Para los siguientes puntos necesitaremos | ||
* //primeros :: [(a,b)] -> [a]// y //segundos :: [(a,b)] -> [b]// que le toman la primera y segunda coordenada a cada elemento de la lista de pares. Sirve para obtener todas las urls fuente y destino respectivamente. Ayuda: con '' | * //primeros :: [(a,b)] -> [a]// y //segundos :: [(a,b)] -> [b]// que le toman la primera y segunda coordenada a cada elemento de la lista de pares. Sirve para obtener todas las urls fuente y destino respectivamente. Ayuda: con '' | ||
* // | * // | ||
- | * Ahora queremos saber si un determinado url está en nuestro modelo simplificado y acotado de la web. La función que nos determina si un elemento está o no está en una lista es un acumulador, ya que parte de una lista y nos devuelve un valor (booleano), más en concreto el acumulador //elemento :: a -> [a] -> Bool//. En el preámbulo hay una función que devuelve True si un elemento dado está en una lista, cuál es? Si no la encontramos podemos definirla utilizando '' | + | * Ahora queremos saber si un determinado url está en nuestro modelo simplificado y acotado de la web. La función que nos determina si un elemento está o no está en una lista es un acumulador, ya que parte de una lista y nos devuelve un valor (booleano), más en concreto el acumulador //elemento :: Eq a => a -> [a] -> Bool//. En el preámbulo hay una función que devuelve True si un elemento dado está en una lista, cuál es? Si no la encontramos podemos definirla utilizando '' |
* ¿Cómo podemos saber cuántas veces ocurre una determinada página? y cómo podemos distinguir entre cuántas veces en todo el archivo, cuántas veces apuntando, cuántas veces apuntada? Definir //cuantas :: Eq a => a -> [a] -> Int//, donde //cuantas x xs// que determina la cantidad de veces que ocurre //x// en //xs//. Utilizar esto junto a // | * ¿Cómo podemos saber cuántas veces ocurre una determinada página? y cómo podemos distinguir entre cuántas veces en todo el archivo, cuántas veces apuntando, cuántas veces apuntada? Definir //cuantas :: Eq a => a -> [a] -> Int//, donde //cuantas x xs// que determina la cantidad de veces que ocurre //x// en //xs//. Utilizar esto junto a // | ||
* ¿Cómo podemos saber a qué páginas apunta una determinada página? // | * ¿Cómo podemos saber a qué páginas apunta una determinada página? // | ||
Línea 241: | Línea 245: | ||
* ¿Cómo podemos saber cuántas páginas web distintas apuntan a una determinada página? // | * ¿Cómo podemos saber cuántas páginas web distintas apuntan a una determinada página? // | ||
- | FIXME : reescribir | ||
- | la:: reescribir cómo? con ejemplos? | ||
Por último, de cara al futuro o a la próxima clase, podemos pensar cómo aplicaríamos estas funciones (que ahora aplicamos a una sola url) a todas las urls de la lista, recursivamente, | Por último, de cara al futuro o a la próxima clase, podemos pensar cómo aplicaríamos estas funciones (que ahora aplicamos a una sola url) a todas las urls de la lista, recursivamente, |
introalg/taller07_5.1180396110.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)