Cursos‎ > ‎Cursadas Anteriores‎ > ‎2019‎ > ‎Noc-Jueves‎ > ‎

Bitácora de clase - Jueves Noche 2019

Acá van a encontrar información relacionada con los temas vistos, ejercitación y trabajos prácticos.

Clase 16 - Listas

publicado a la‎(s)‎ 16 ago. 2019 14:11 por Mariana Matos

En esta clase cerramos los temas del paradigma lógico viendo cómo se trabaja con otro tipo de individuo compuesto que son las listas.

Vimos cómo se puede hacer para trabajar con listas recursivamente usando pattern matching, y también algunos predicados que ya vienen para trabajar con listas más cómodamente (hay más en la guía de lenguajes que pueden ser de utilidad también):

  • length/2
  • sumlist/2
  • member/2
  • y findall/3 que es un predicado de orden superior.

Importante! No olviden que la mayoría de los problemas ya los podíamos resolver sin listas, de forma declarativa. Para no caer en la tentación, les dejamos Los Donny, no! para el uso responsable de findall.

Para profundizar y ejercitar

  • De la sección de apuntes:
    • En el Módulo 3 sobre individuos compuestos se explica listas más en profundidad de lo que llegamos a ver, incluyendo otros predicados para trabajar con listas sencillos pero menos cotidianos.
    • En el Módulo 4 sobre predicados de orden superior se explica el predicado findall/3.
    • En el Módulo 5 sobre recursividad se termina de explicar este tema para cuando las otras herramientas se quedan cortas.
    • En el Módulo 6, en la sección de Code Smells, pueden encontrar una versión extendida con ejemplos concretos de los Donny, no!.
  • De Mumuki pueden trabajar con todas las guías, ya que terminamos de ver todo el contenido teórico que teníamos planeado para este paradigma.

Clase 14 - Functores y Polimorfismo

publicado a la‎(s)‎ 12 jul. 2019 6:41 por Mariana Matos

En esta clase incorporamos un nuevo tipo de individuo, que tiene la particularidad de ser un individuo compuesto: el functor.

Un concepto importante que surgió gracias a estos simpáticos individuos fue polimorfismo.

Para profundizar y ejercitar

  • De Mumuki pueden trabajar con las guías de Functores.
  • De la sección de apuntes: en el Módulo 3 se explica functores y polimorfismo, pero en el medio también se explican las listas que preferimos no introducir aún. Pueden complementar lo visto con ese apunte, pero tal vez convenga postergarlo para evitar confusiones.

Clase 13 - Lógica de Primer Orden

publicado a la‎(s)‎ 6 jul. 2019 5:32 por Mariana Matos   [ actualizado el 6 jul. 2019 5:34 ]

En esta clase introdujimos los predicados de orden superior:

  • not/1 para la negación
  • forall/2 para el cuantificador universal (para todo)

De esa forma cubrimos todo lo relacionado con existencia (no hace falta usar ningún predicado especial para esto), no existencia y para todo, que es lo que nos faltaba para poder trabajar con lógica de primer orden.

También vimos que ambos predicados tienen problemas de inversibilidad, con lo cual hay que tomar ciertos recaudos al usarlos para que nuestros predicados sean inversibles. En general alcanza con que los parámetros de nuestros predicados lleguen unificados al consultar not/1 y forall/2, lo cual se logra consultando un predicado inversible previamente en nuestra regla que se encargue de unificar esas variables.

Para profundizar y ejercitar

  • De la sección de apuntes: Módulo 4 de Lógico hasta sección 4 inclusive.
  • De Mumuki pueden trabajar con las guías de negación y cuantificación.

Clase 12 - Introducción al Paradigma Lógico

publicado a la‎(s)‎ 1 jul. 2019 5:34 por Mariana Matos

En esta clase arrancamos con el Paradigma Lógico de la mano del lenguaje Prolog.

Acá pueden encontrar una introducción al paradigma que sienta las bases de cómo trabajar, y cómo se resuelven con estas herramientas básicas la conjunción y disyunción. Hasta ahora trabajamos sólo con individuos simples.

Uno de los temas que introdujimos en esta clase es uno de los puntos fuertes de este paradigma y es el concepto de inversibilidad, lo cual permite hacer consultas con múltiples respuestas. Profundizaremos más adelante el tema de inversibilidad.

Resumen de nomenclatura <-- Repasar esto si no recordás a qué nos referimos al decir predicado, hecho, regla, cláusula, aridad, consulta, individuo, átomo...

Para profundizar y ejercitar

  • De la sección de apuntes: Módulos 1 y 2 de Lógico.
  • De Mumuki pueden trabajar con las primeras dos guías.

Clase 9 - Estrategias de Evaluación. Listas infinitas. Typeclasses.

publicado a la‎(s)‎ 31 may. 2019 6:08 por Mariana Matos

En esta clase estuvimos viendo los siguientes temas:

Para profundizar estos temas:
  • De la sección de apuntes: Módulos 4 y 7 de funcional.
  • De Mumuki:
    • Práctica Evaluación Diferida, donde van a encontrar ejercicios puntuales donde se aprovecha esto, así como ver cómo usar algunas funciones que ya vienen en Haskell que tienen en la guía de lenguajes bajo el título Funciones de generación de listas.
    • Sobre tipado están las lecciones 3, 4 y 9.

Clase 6 - Listas, Recursividad vs. Orden Superior

publicado a la‎(s)‎ 3 may. 2019 7:04 por Mariana Matos

En esta clase recordamos la idea de recursividad como mecanismo alternativo a la iteración usando estructuras de control como el for y el while que conocen de algoritmos, esta vez para trabajar un nuevo tipo de dato compuesto, cuya naturaleza en Haskell es recursiva, que son las listas.

También vimos uno de los conceptos más fuertes de la materia, sobre el cual vamos a volver una y otra vez a lo largo del año, que es Orden Superior. En particular vimos esta idea para trabajar con listas, porque si bien se puede hacer todo con pattern matching y recursividad, podemos llegar a soluciones mucho mejores evitando esta mecánica.

Sin embargo es importante entender que orden superior puede aplicarse en cualquier contexto, por ejemplo la composición no es más que una función de orden superior super genérica y sencilla!

(.) :: (b -> c) -> (a -> b) -> (a -> c)
(.) g f x = g (f x)

Ahora que incorporamos el uso y definición de funciones de orden superior a nuestras herramientas para trabajar, vamos a poder armar abstracciones todavía más poderosas, pudiendo parametrizar parte de la lógica a ejecutar. En los lenguajes funcionales esto normalmente es sencillo, gracias a que las funciones son ciudadanos de primera clase.

Entre las funciones de orden superior para trabajar con listas que vimos en esta clase están:

  • map :: (a -> b) -> [a] -> [b]
  • filter :: (a -> Bool) -> [a] -> [a]
  • all :: (a -> Bool) -> [a] -> Bool
  • any :: (a -> Bool) -> [a] -> Bool

Si bien vimos cómo se pueden definir estas funciones y otras para trabajar con listas usando recursividad, al trabajar con listas debemos recordar lo que hablamos la primer clase sobre declaratividad. En general, para trabajar con listas, vamos a preferir siempre las soluciones que usen 1 o más funciones de orden superior adecuadas para el problema a resolver por sobre soluciones recursivas, ya que las primeras son más declarativas que las segundas.

Con esto no queremos decir que nunca vayan a usar recursividad:

  • La recursividad es una gran herramienta cuando el problema tiene naturaleza recursiva (como el ejemplo del factorial), en cuyo caso la solución a la que lleguemos recursivamente a priori no va a ser criticable en términos de declaratividad.
  • La recursividad trabajando con listas a veces simplemente es necesaria, porque el problema no se ajusta bien al algoritmo de recorrido estándar que viene resuelto con las funciones de orden superior que ya existen.

Luego de esta clase ya casi vimos todos los temas de este paradigma, nos falta revelar un par de misterios más que tenemos bajo la manga. Pero lo que falta sobre todo es práctica, mucha, para terminar de dominar las herramientas así como incorporar algunas nociones más de diseño.

Para profundizar y ejercitar

  • De la sección de apuntes: Módulos 5 y 6 de funcional.
  • De Mumuki, con lo que vimos ya podrían hacer todas las guías, pero en particular estas guías sirven como práctica de los temas vistos en esta clase:
    • Práctica de Listas
    • Práctica Recursividad
    • Práctica de Aplicación Parcial y Orden Superior

Clase 5 - Composición y Aplicación Parcial

publicado a la‎(s)‎ 25 abr. 2019 19:20 por Mariana Matos

En esta clase vimos los siguientes temas:

Para profundizar y ejercitar
  • De la sección de apuntes: Módulo 2 de funcional.
  • De Mumuki:
    • Ya pueden terminar Valores y Funciones y su práctica asociada.
    • Introducción tipos de dato, hasta ejercicio 9 inclusive.
    • Aplicación Parcial y Orden Superior (Ejercicios 1 al 4 inclusive).
    • Práctica Aplicación Parcial y Orden Superior (hasta ejercicio 6).

Clase 3 - Guardas, pattern matching. Tuplas y Data.

publicado a la‎(s)‎ 4 abr. 2019 12:54 por Mariana Matos   [ actualizado el 4 abr. 2019 13:30 ]

En esta clase vimos los siguientes temas:

Para profundizar y ejercitar

  • De la sección de apuntes: Módulos 1 y 3 de funcional (teniendo en cuenta que todavía no vimos listas).
  • De Mumuki:
    • Alternativas: Guardas y Patrones
    • Modelado (hasta ejercicio 13)

Clase 2 - Paradigma Funcional

publicado a la‎(s)‎ 4 abr. 2019 12:45 por Mariana Matos

En esta clase retomamos la introducción a funcional donde se trabaja con funciones que son valores cuya operación principal es la aplicación.

Por ahora sólo trabajamos con los tipos de datos más simples de Haskell, la clase que viene incorporaremos más herramientas interesantes para representar la información de nuestro programa.

Clase 1 - Introducción a la materia

publicado a la‎(s)‎ 22 mar. 2019 13:26 por Mariana Matos   [ actualizado el 22 mar. 2019 13:34 ]

También se dio una pequeña introducción a lo que es el paradigma funcional que profundizaremos en las próximas clases.

Para la próxima:
  • Traigan la guía de lenguajes (ver sección de Apuntes, donde se encuentra esta guía y mucho más).
  • Regístrense en el aula de Mumuki y resuelvan los ejercicios 1, 2 y 3 de la guía de TP de funcional (que irá creciendo próximamente).
  • También pueden ir avanzando con las lecciones 1 y 2 a modo de repaso y práctica adicional.

1-10 of 10