Se informará a los alumnos mediante anuncios en la Plataforma Oficial de
Enseñanza Virtual.
Horario de tutorías a partir del 16 de marzo
de 2020
Lunes y Jueves, de 16:30 a 19:30 h.
Por email o foros de debate de enseñanza virtual. En todo caso, se
intentará resolver las dudas a demanda, fuera de ese horario.
Horario de tutorías del Segundo Cuatrimestre
Miércoles, de 10:30 a 12:30 h.
Jueves, de 10:00 a 14:00
Edificio Blanco, Despacho E1.64
Haskell / Emacs
Lista de funciones elementales de Haskell
Resumen de instrucciones útiles para utilizar el editor Emacs
Relaciones de Ejercicios
Relación 1 Tema
2. Definición de funciones por composición.
Relación 2. Tema 4.
Condicionales, guardas y patrones. Incluimos los tipos de las funciones y
comprobaciones con QuickCheck.
Relación 3. Tema 5. Definición de funciones por comprensión. En los ejercicios 17 y 30 usaremos las funciones read y show.
Relación 4. Tema 5.
Comprensión
Relación 5. Tema 5. Comprensión con caracteres. Funciones de la librería Data.Char.
Relación 5.1 Temas 5 y 6. Recursión/Comprensión.
Relación 5.2 Temas 5 y
6. Recursión/Comprensión.
Relación 6 Tema 6.
Recursión.
Relación 7 Tema 7. Orden
Superior.Plegado.
Relación 8 Tema 7. Orden
Superior.Plegado.
Relación 9 Tema
7.Recursión, Acumuladores y Plegados foldr y foldl.
Relación 10 Tema 10.
Evaluación Perezosa y listas infinitas.
Relación 11 Tema 9. Tipos
de datos: listas.
Relación 12 Tema 9.
Arboles.
Relación 13 Tema 9. Tipos de
datos algebraicos.
Relación 14 Tema 10.
Evaluación Perezosa y listas infinitas. Usamos la librería de los números
primos. Puedes ver su manual aquí. Para
instalarla, basta abrir un terminal y escribir: cabal install Primes.
Estudia la librería Data.List . Muchas de sus funciones pueden servirte para mejorar tus soluciones. Puedes ver su manual aquí , o bien aquí..
Tema 13. Cómo hacer que una función solicite los datos de entrada por el teclado, ejemplo de interacción
Código del tema de programación interactiva para verlo funcionando.
Relación 15 Tema 13.
Programación interactiva.
Relación 16 Tema 18.
Matrices.
Relación 17 Tema 18.
Matrices. Método de Gauss.
Relación 18 Tema
18. Relación de ejercicios de examen sobre vectores y matrices.
Para la siguiente relación, necesitarás las librerías de vectores y matrices. Mira más abajo en esta página la forma y el orden en que debes instalarlas con cabal en tu ordenador. Primero la de vectores y luego la de matrices.
Relación 19 Tema 18. Método
de Gauss. Vectores y Matrices con las
librerías Data.Vector
y
Data.Matrix.
Relación 20
Ejercicios sobre relaciones binarias.
Relación
21 Ejercicios de la relación 20 de relaciones binarias, con un
nuevo tipo de dato y resueltos con la
librería Data.Set que puedes consultar
en este documento creado por el prof. Jose A. Alonso.
Relación 22 Cálculo
numérico: Diferenciación y métodos de Herón y de Newton.
Práctica 23 Combinatoria.
Práctica 24
Estadística descriptiva.
Aquí se interrumpe la docencia presencial. La información, vídeos, temas,
relaciones comentadas, tutorías, foros de dudas y debate, pruebas y demas
actividad pasa a gestionarse desde la plataforma de enseñanza virtual.
Práctica 25 Sobre los números
de Lychrel.
En adelante necesitarás la información sobre los TAD's que aparece Aquí
Práctica 26 Tema 14. TAD: Pilas
Práctica 27 Tema 15. TAD: Colas.
Práctica 28 Ecuación con
factoriales.
Práctica 29 Tema 17 TAD:
Conjuntos.
Práctica 30 Tema 21. El TAD de los polinomios.Operaciones.
Práctica 31 Tema 21. El
TAD de los polinomios.
Práctica 32 Tema 22. Ejercicios
del TAD de los grafos.
Práctica 33 Tema
22. Implementación de los grafos mediante listas.
Práctica 34 Tema
30. Programación dinámica.
Práctica 35 Tema
30. Programación dinámica.
Práctica 36 Tema 22. Más
ejercicios sobre grafos.
Práctica 37 Ejercicios
variados.
Práctica 38
Enumeración de los números Racionales.
Práctica 39 Ejercicios de examen para
repasar.
Pruebas de evaluación del Grupo 1
Fechas y aulas programadas para las pruebas. Tras la publicación de las notas de cada prueba en la plataforma de ensañanza virtual, aquí estarán disponibles los enunciados y/o soluciones.
Primera prueba:
Enunciado. Aquí una solución.
Segunda prueba (Enunciado 1 del examen): Enunciado. Aquí una solución.
Segunda prueba (Enunciado 2 del examen): Enunciado. Aquí una solución.
Tercera
prueba. Prueba
resuelta.
Cuarta prueba.
Prueba programada para el lunes 16 de
marzo, viendose afectada por el decreto del Estado de Alarma y la suspensión
de la docencia presencial.
La Evaluación se reprogramará cuando sea
posible.De todo ello se informará al alumnado a través de la plataforma
oficial de Enseñanza Virtual.
Cuarta y Quinta prueba.
Los enunciados de estas pruebas están
disponibles en la Plataforma de Enseñanza Virtual, en las carpetas
correspondienes.
Examen de la Primera Convocatoria (Junio
2020). Aquí una solución.
Instalación de librerías y comentarios
Instalación de la librería QuickCheck
- Abrir un terminal
- Escribir: cabal update
- Escribir: cabal install QuickCheck
Si da fallo porque cabal no está instalado, entonces:
- Escribir en el terminal: cabal install cabal-install
- Escribir: cabal install QuickCheck
Instalación de la librería Data.Vector
- Abrir un terminal
- Escribir: cabal update
- Escribir: cabal install Vector
Instalación de la librería Data.Matrix
- Abrir un terminal
- Escribir: cabal update
- Escribir: cabal install Matrix
Posibles errores con Emacs/Haskell
Error al cargar el fichero "Spawning child process":
- Paso 1. Ir a Inicio > Todos los Programas > Accesorios > Simbolo del sistema
- Paso 2. Escribir set Shell=
- Paso 3. Cerrar y volver a ejecutar emacs.
Error al cargar el fichero "Process haskell finished":
- Evitar usar ficheros que estén dentro de carpetas o subcarpetas que contengan caracteres no ASCII: "ñ", "º", tildes, espacios....
Diferencia entre las funciones rem y mod.
Limitar el tamaño de las comprobaciones con quickCheck
-
Escribir: quickCheckWith (stdArgs (maxSize = n)) prop_funcion, donde n será el valor máximo de argumentos que generará quickCheck y prop_funcion será la propiedad a comprobar
Visualizar los ejemplos generados por quickCheck
- Tendrás que utilizar la instrucción verboseCheck en lugar de quickCheck
- También puedes combinar las dos posibilidades usando verboseCheckWith
Si no ves correctamente las matrices en la ventana de interacción de emacs, prueba a hacer esto:
- Abrir Emacs.
- Abrir la relación 19.
- Escribir: Control x (las dos teclas a la vez)
- Escribir: Intro
- Escribir: f
- Escribir: iso-8859-1
- Escribir: Intro
- Salvar el fichero
- Cargar el fichero
La función mapRow:
- mapRow :: (Int -> a-> a) -> Int -> Matrix a -> Matrix a
- Recibe tres argumentos, la función f, la fila i (numero entero) sobre la que va a aplicar la f y la matriz m de donde toma la fila
- Devuelve la nueva matriz con la fila i modificada por la función f
- Observar que la función f tiene dos argumentos, uno entero y uno de tipo a, que es el tipo de valores que contiene la matriz
- El entero que toma f es, en este caso, el valor por defecto que le pasamos a la i, es decir, que f toma como primer argumento la fila sobre la que vamos a actuar.
- Supongamos que queremos obtener la matriz que resulta de sumar a todos los elementos de la fila 2 de m el número 5. Escribiremos: mapRow (\_ x -> x+5) 2 m
- El guión bajo que sigue al lambda toma el valor de la fila 2 que pasamos luego.
- La función mapCol tiene la misma signatura, porlo tanto, al darle la función a utilizar sobre la columna en cuestión, debemos considerar ese argumento adicional igualmente.
- Si no queremos usar lambda expresiones, podemos utilizar un where para definir la función, pero eso no evita que tengamos en cuenta la signatura de mapRow que fuerza a añadir ese argumento de fila o columna. Escribiremos mapRow f 2 m where f _ x = x+5.
- No funcionará mapRow (+5) 2 m, pues (+5) toma un solo argumento y necesitamos 2. Podremos resolverlo poniendo mapRow f 2 m where f _ = (+5) , ya que f _ y = (+5) y = y+5 que es lo que pretendíamos.
| |