Cursada 2018‎ > ‎

Bitácora

Aquí iremos subiendo clase a clase los temas vistos, junto con material teórico y práctico complementario.

Clase 14 - Parcial de lógico!

publicado a la‎(s)‎ 12 jun. 2018 14:09 por Nahuel Palumbo

Tomamos este parcial: Rusia 2018. Mucha suerte a todos!

Recibirán las correcciones y, aquellos que deban, directivas sobre los recuperatorios a lo largo de esta semana.

Clase 13 - Corrección del TP

publicado a la‎(s)‎ 5 jun. 2018 10:19 por Nahuel Palumbo

Hoy corregimos el TP de lógico!

Además, les dejamos este parcial que tomamos el año pasado para practicar: Sense 8.

Clase 12 - Aritmética, Functores y Recursividad

publicado a la‎(s)‎ 3 jun. 2018 11:56 por Nahuel Palumbo

Comenzamos mostrando los problemas para hacer cálculos aritméticos que tiene Prolog por ser un motos de inferencia (y no de reducciones como Haskell). Para los que no estuvieron en esta parte les recomendamos hacer la guía de aritmética de Mumuki.

Luego estuvimos resolviendo el parcial de Sueños donde:
  • El primer punto nos introdujo un tipo de individuo complejo: Functores. Que son tuplas sin nombre.
  • El segundo nos pedía que los usemos polimórficamente.
  • Los últimos dos requerían que pensemos en un buen diseño, o sea, en la forma de comunicar y armar los componentes del sistema (predicados).
  • Además, el último tuvo un problema que lo resolvimos con recursividad.

Todo esto lo pueden encontrar en los apuntes (que les recomendamos leer!):

¡NO SE OLVIDEN QUE LA PRÓXIMA CLASE ES LA ENTREGA DE TP!

Clase 11 - negación, forall y el alcance de la inversibilidad

publicado a la‎(s)‎ 3 jun. 2018 11:23 por Nahuel Palumbo

En esta clase vimos los únicos dos predicados de orden superior con los que vamos a trabajar:
  • not/1. Que sirve para negar el resultado de una consulta.
  • forall/2.  Que sirve como cuantificador de "para todo" sobre la variable libre que relaciona ambos predicados (precedente y consecuente). Hasta ahora, el cuantificador implícito era el de existencia.
Y vimos que hay que tener en cuenta el alcance de la inversibilidad con estos predicados, ya que debemos delimitar los individuos posibles. Para eso usamos la técnica de generación.

El material teórico lo pueden encontrar en los apuntes: Módulo 4 - Predicados de orden superior.

¡RECUERDEN METER PRÁCTICA CON MUMUKI SOBRE ESTOS TEMAS! (En la planificación dice qué guías pueden hacer)

Clase 10 - Introducción a Lógico

publicado a la‎(s)‎ 22 may. 2018 2:40 por Nahuel Palumbo

¡Comenzamos con el paradigma lógico!

Introducimos que se trata de un paradigma declarativo que permite inferir verdades que se encuentran en la base de conocimiento (basado en el Principio de Universo Cerrado) en modo de predicados (poseen un valor de verdad) compuestos por cláusulas (hechos o reglas)Luego estuvimos haciendo consultas, tanto individuales como existenciales.
Si todos estos nombres los confunden, les dejamos este artículo que ordena un poco todo lo del párrafo anterior.

Luego vimos como escribir conjunciones y disyunciones. Y nos sorprendimos con la capacidad de otorgar múltiples respuestas para una consulta.

Todo esto lo pueden encontrar en el módulo 1 y módulo 2 de la sección de apuntes.

Finalmente, comenzamos a hacer las siguientes guías de Mumuki:
Y quedó de tarea comenzar (primeros 4 ejercicios)

Clase 9 - Parcial de Funcional

publicado a la‎(s)‎ 8 may. 2018 14:26 por Nahuel Palumbo

Tomamos el parcial de Piratas del Caribe. ¡Esperamos que les haya ido bien!

Clase 8 - Día del trabajador

publicado a la‎(s)‎ 8 may. 2018 3:37 por Nahuel Palumbo

¡Disfruten el feriado! :)

Clase 7 - Entrega de TP

publicado a la‎(s)‎ 8 may. 2018 3:36 por Nahuel Palumbo

Tuvimos la última entrega del TP de funcional. Muy buen trabajo de todos!!

Luego planteamos distintas versiones de la función esMultiploDe con sus explicaciones:
  esMultiploDe n m = (== 0) . rem n m
Esto NO tipa porque rem n m (al estar aplicado totalmente) ya es un número, y no se puede componer. Para salvar eso habría que cortar esa aplicación con unos paréntesis: esMultiploDe n m = ((== 0) . rem n) m

  esMultiploDe n = (== 0) . rem n
Esta solución compila perfecto. En esta versión point-free estamos pensando en términos de funciones: si necesitamos una función que nos diga si un número es múltiplo de otro, solo necesito saber ese número para armar la función (recibo un número y devuelvo una función). Así es como piensa un programador funcional!

  esMultiploDe = (== 0) . rem
Esto NO tipa porque, si pensamos que la función rem está currificada: la podríamos ver como una función que espera un parámetro y retorna otra función (la que espera el segundo parámetro), pero el (== 0) espera un número, no una función.

Clase 6 - Práctica con parciales

publicado a la‎(s)‎ 21 abr. 2018 15:08 por Nahuel Palumbo

Terminamos de resolver el parcial de Monsters Inc. que comenzamos la clase pasada.
Y, además, implementamos una posible solución para el parcial de OSPF.
Dejamos el código hecho en clase acá adjunto.

La clase que viene es la última entrega del TP. Aprovechen la entrega presencial para sacarse todas las dudas para el parcial.
Les dejamos el parcial de Maquinitas por si quieren meterle más práctica para el parcial. Podemos hacer una puesta en común al finalizar la corrección.

También dejamos de nuevo el código de la clase 5 sobre Typeclasses: evitando el problema Show de datas con funciones a partir de hacer Show las funciones y derivando.

Clase 5 - Evaluación diferida y Typeclasses

publicado a la‎(s)‎ 17 abr. 2018 5:16 por Nahuel Palumbo

Terminamos de ver los temas faltantes / pendientes:
  • Vimos que Haskell posee clase de tipos - typeclass - como forma de tratar polimórficamente distintos tipos de datos. En ellas se declaran las operaciones, como las interfaces de Java, pero no definen un tipo en sí mismas.
  • Por último, prestamos más atención a cómo funciona el motor de reducciones, sobre todo para el extraño caso de listas infinitas (y al operar sobre ellas). Descubrimos que tiene una forma de evaluación diferida que hace que solo se ejecute las expresiones necesarias para el resultado final. Esto es posible gracias a la ausencia de efecto colateral!
Los apuntes son:
Luego comenzamos a resolver el ejercicio de Monsters Inc. Les dejamos este apunte con una posible solución (no es exactamente el mismo enunciado pero supongo que les va a servir).
Todo el código de la clase lo pueden descargar acá abajo.

1-10 of 14