introalg:taller09_8
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:taller09_8 [2009/05/18 11:18] – laura | introalg:taller09_8 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 59: | Línea 59: | ||
Ahora podemos reescribir todas las aplicaciones usando '' | Ahora podemos reescribir todas las aplicaciones usando '' | ||
< | < | ||
- | duplicar' | + | duplicar :: [Int] -> [Int] |
duplicar xs = aplica (*2) xs | duplicar xs = aplica (*2) xs | ||
- | veintePorCiento' | + | veintePorCiento :: [Float] -> [Float] |
- | veintePorCiento xs = veintePorCiento | + | veintePorCiento xs = aplica |
</ | </ | ||
Línea 142: | Línea 142: | ||
Entonces, la estructura común de todas estas funciones es: | Entonces, la estructura común de todas estas funciones es: | ||
< | < | ||
- | fRecursiva :: [a] -> [b] | + | fRecursiva :: [a] -> b |
fRecursiva [] = neutro | fRecursiva [] = neutro | ||
fRecursiva (x:xs) = fNoRecursiva x (fRecursiva xs) | fRecursiva (x:xs) = fNoRecursiva x (fRecursiva xs) | ||
Línea 222: | Línea 222: | ||
===== Ejercicios para pensar ===== | ===== Ejercicios para pensar ===== | ||
- | Dos ciudades | + | ==== Conexión entre dos ciudades |
+ | |||
+ | Dada la siguiente base de conocimiento: | ||
< | < | ||
conectadas(rosario, | conectadas(rosario, | ||
Línea 230: | Línea 232: | ||
conectadas(santaCruz, | conectadas(santaCruz, | ||
</ | </ | ||
+ | |||
+ | Tratemos de averiguar si se puede ir de una ciudad a otra, es decir, si hay alguna conexión entre dos ciudades. Definimos el predicado '' | ||
< | < | ||
Línea 236: | Línea 240: | ||
</ | </ | ||
+ | Ahora traten de ampliar esta función para que el intérprete nos diga el itinerario por el que hay que ir de una ciudad a otra. Otra posible ampliación es que el intérprete nos diga con qué medios de transporte podemos desplazarnos de una ciudad a otra; para que se pueda contestar a eso habrá que modificar los hechos. | ||
- | Recomendar amigos en // | + | ==== Recomendar amigos en una red social ==== |
- | La signatura | + | Este problema es complejo y por lo tanto se puede abordar |
+ | |||
+ | En primer lugar, pensemos qué información necesita nuestra función para trabajar. Primero de todo, necesita saber quién es la persona a quien vamos a recomendar nuevos amigos, y cuáles son los amigos que ya tiene. Luego necesita tener acceso a la base de datos en la que se guarda la información sobre todas las personas que están en la red social en cuestión. Por lo tanto, necesita dos argumentos: la persona y el listado de todas las personas. | ||
+ | |||
+ | Cómo se representa la información sobre una persona en este problema? Hay muchas posibilidades. Yo les propongo la siguiente: una persona se representa como una tresupla donde el primer elemento es un entero que representa el número único de identificación de esa persona en la red social, el segundo elemento es un String que representa el nombre de la persona, y el tercer elemento es una lista de enteros que representa los identificadores de los amigos de esta persona en la red social. El resultado de la función podría ser un listado de nuevos amigos, representados por tuplas '' | ||
< | < | ||
- | -- recomendarNuevosAmigos :: persona | + | recomendarNuevosAmigos :: (Int, |
</ | </ | ||
- | Lo podemos | + | Ahora que sabemos con qué estructuras de datos vamos a trabajar, pensemos en lo que tenemos que hacer con ellas: |
+ | - obtener la lista de todos los amigos de los amigos de la persona a quien queremos recomendar nuevos amigos (llamémosle '' | ||
+ | - descartar de esa lista todos los que ya son amigos de '' | ||
+ | - descartar de esa lista a '' | ||
+ | - quedarnos solamente con los amigos que son amigos por lo menos de dos amigos de '' | ||
+ | |||
+ | La función principal '' | ||
< | < | ||
- | recomendarNuevosAmigos :: (Int, | + | recomendarNuevosAmigos (id, |
- | recomendarNuevosAmigos (id, | + | |
</ | </ | ||
- | Ahora sólo queda definir | + | ===== Ejercicios ===== |
+ | |||
+ | * Redefinan las funciones propuestas en los ejercicios de la clase anterior, ahora usando las generalizaciones '' | ||
+ | |||
+ | * Definan una función que calcule el porcentaje de estudiantes que aprobó o promocionó la materia, definiendo una función '' | ||
- | Incorporamos | + | * Definan |
< | < | ||
- | recomendarNuevosAmigos | + | mayor(clara,esteban). |
+ | mayor(esteban, | ||
+ | mayor(paula, | ||
+ | mayor(marcos, | ||
</ | </ |
introalg/taller09_8.1242645512.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)