Cursos‎ > ‎Cursadas Anteriores‎ > ‎2019‎ > ‎Mañ-Jueves‎ > ‎

Bitácora Jueves Mañana 2019

16/05 - Corrección TP Integrador e intro a Testing

publicado a la‎(s)‎ 16 may. 2019 14:49 por Alf Sanzo

TP Integrador: La última fecha para entregarlo es el martes 28/05.
Testing:  O cómo podemos escribir un programa que prueba mi programa. ¡Entonces probar todas mis funciones es fácil y rapidísimo! Lo puedo ejecutar todas las veces que quiera (después de cada cambio) para asegurarme que mi sistema funciona correctamente.
  • Aquí qué es una prueba unitaria en wikipedia. 
  • Aquí hay un apunte que cuenta específicamente cómo se hacen tests en Haskell, utilizando la librería HSpec.
  • Adjuntamos los tests del TP Integrador. Si quieren agregárselos, van a necesitar: 
    • que Karrs.hs pase a llamarse TP.hs (tiene que tener el mismo nombre que el "module TP where" de arriba del archivo).
    • Poner Tests.hs en la misma carpeta
    • Hacer ghci Tests.hs en la consola, y correr la función "main".

09/05 - Recursividad, Fold, Estrategias de Evaluación

publicado a la‎(s)‎ 9 may. 2019 9:20 por Alf Sanzo   [ actualizado el 9 may. 2019 11:14 por Nahuel Palumbo ]

Buenas!

Hoy vimos:
  • Algunos comentarios sobre el TP3.
  • Expresiones Lambda
  • Recursividad (Acá las diapositivas )
  • Familia Fold (adjuntamos el código)
  • Evaluación diferida (Acá la fotocopia)
  • Listas Infinitas
Material:

Tarea

  • El TP Integrador completo. Se entrega completo el martes que viene 23:59 hs  y se corrige presencialmente el jueves que viene. Si hay algún problema con estas dos fechas por favor comunicarse con los tutores.

02/05 - Restricciones de tipo y Polimorfismo

publicado a la‎(s)‎ 2 may. 2019 13:37 por Alf Sanzo   [ actualizado el 2 may. 2019 14:06 ]

Hoy hicimos el siguiente ejercicio:
Hicimos un pequeño ejercicio de inferencia:
fLoca x y algo otraCosa
| x > y = abs algo
| otherwise = abs otraCosa
En el que se vio que:
  • x está operado con y con el mayor (>) por lo que ambos son del mismo tipo y además deben ser ordenables.
  • algo y otraCosa deben ser del mismo tipo, porque se devuelven en ambas ramas ¡y las funciones deben devolver siempre un mismo tipo!. Además, deben ser números porque se operan con el abs.
Entonces:
fLoca :: (Num b, Ord a) => a -> a -> b -> b -> b

Tarea

  • Terminar/corregir el TP3.
  • En breve liberaremos el  enunciado de la segunda parte del TP Integrador. (cuya entrega es presencial en dos semanas)
  • ¡Corregir los otros TP colgados!

25/4 - Listas!

publicado a la‎(s)‎ 25 abr. 2019 5:25 por Alf Sanzo   [ actualizado el 30 abr. 2019 15:28 por Nahuel Palumbo ]

Hoy tuvimos la corrección presencial de PTI, espero que les haya servido.

Después fuimos al aula y vimos listas:
  • Son estructuras compuestas, para juntar muchos elementos.
  • ¡Todos los elementos tienen que ser del mismo tipo!
  • Tiene cantidad variable: no importa la cantidad de elementos que tiene.
  • Estuvimos viendo varias operaciones con listas, sobre todo las de orden superior: any, all, filter y map.
  • Pueden encontrar el archivo que estuvimos codeando en clase al final de esta entrada ⬇
Pueden ver la parte de listas en el Módulo 3: Modelado de información.

Acá les dejamos una graciosa representación de una lista, con los nombres de cada parte:


Quedó como tarea:
- Funcional TP3 Individual: Lord of the Functions - Tarea del classroom acáFecha de entrega: martes 30/4 23:59 hs.
- Hacer las correcciones pedidas para los TPs.
- Les avisaremos cuando esté liberada la parte 2 del TPI.

11/04 - Modelado de información

publicado a la‎(s)‎ 11 abr. 2019 10:53 por Nahuel Palumbo   [ actualizado el 17 abr. 2019 14:40 por Alf Sanzo ]

Vimos cómo se diseña (o sea, se toma decisiones) un modelo en funcional.
Particularmente vimos nuevos tipos de datos:
  • Type alias: sirve para renombrar un tipo de dato en particular.
  • Tuplas: sirve para agrupar distintos datos dentro de una estructura compuesta.
  • Data: similares a las tuplas, salvo que sirven para crear nuestro propios tipos de datos.
Y vimos cómo hacer pattern matching con cada uno de ellos, que ahora tiene más utilidad.

Todo esto está explicado en el apunte Módulo 3: Modelado de información

Todo el código de la clase se encuentra en este repo (que se pueden clonar!). Pueden encontrar el enunciado en el README.

Cosas que quedaron fuera de la clase (y que van a encontrar en los links)
  • Listas: que mostraremos la clase que viene.
  • Modelado con funciones: que veremos en algún otro momento.

Tarea: TP Integrador de funcional - Entrega 1

  • Tarea del classroom: https://classroom.github.com/g/-A7l_l6z
  • Es Grupal. Todos los integrantes del grupo deben aceptar la tarea del classroom usando su usuario de Github. Al primero le preguntará el nombre de grupo, los siguientes deberán seleccionarlo.
  • Fecha y hora de entrega: Martes 23/04 23:59hs
  • Consultas a sus tutores.

04/04 - Aplicación parcial y Orden Superior

publicado a la‎(s)‎ 4 abr. 2019 6:58 por Alf Sanzo   [ actualizado el 4 abr. 2019 11:04 por Nahuel Palumbo ]

Hoy estuvimos viendo aplicación parcial y orden superior. Dos conceptos fuertes del paradigma funcional. (*)
Avisos parroquiales para la próxima clase:
  1. Nos mudamos al aula 508
  2. Ya se encuentra disponible el TP2 de funcional (individual) que tiene que estar para el Martes 9 a las 23.59https://classroom.github.com/a/pi8qWkbi

(*) Sí, ¡con esto ya tienen mucho poder! Y ya saben lo que piensa el tío Ben sobre eso...
Resultado de imagen para un gran poder conlleva una gran responsabilidad

28/03 - Guardas y Pattern Matching - TP1

publicado a la‎(s)‎ 27 mar. 2019 22:15 por Alf Sanzo   [ actualizado el 28 mar. 2019 13:58 ]

Hoy vimos:

Tarea

  • Los grupos, cargados en este formulario, debían estar para hoy. Háganlo lo antes posible. Si quieren hacer grupos de 3 me avisan ().
  • Para este domingo 31/03 a las 23:59 tiene que estar entregado el TP1.


21/03 - Intro a la materia y a funcional

publicado a la‎(s)‎ 21 mar. 2019 9:24 por Alf Sanzo   [ actualizado el 21 mar. 2019 15:25 ]

Buenas!

Resumen de la clase

Tarea

  1. Suscribirse a la lista obligatoria (si es que no estás ya suscripto) (Ver el Contrato Cursada Feliz).

  2. Entrar a github.com y crearse un usuario. Sobre el nombre de usuario: Github es un portal que probablemente usen para alguna otra materia y/o para su vida laboral. En lo posible evitar nombres raros, como pepeElGroso o pepeKpo, ya que es muy posible que este mismo usuario sea usado posteriormente en el ámbito profesional. En cualquier caso, si ya tienen uno no hace falta hacerse otro.

  3. Ponerse en grupos de a dos, elegir un nombre de grupo y cargarlo en este formulario. Pueden usar la lista pdepjm para charlar entre uds ó bien verse las caras el jueves que viene y decidirlo en ese momento.

  4. Instalarse un entorno de desarrollo (algún editor para programar). Recomendamos fuertemente seguir las instrucciones de Fer, docente de miércoles a la noche, sobre cómo configurar el entorno Haskell.

  5. Lecciones 1 y 2 de Mumuki funcional.

  6. Avisarle todo esto a quien conozcan que haya faltado la primera clase.


PostData

El código de hoy:

Código original

(mejorando expresividad)

(usando un motor para mejorar declaratividad)

void bobEsponja(int a[], int b, int c[]){

 int d, e = 0;  for (d = 0; d < b; d++) { if (a[d] % 2 == 0) { c[e] = a[d]; e = e + 1; } }

}

void pares(int numeros[], int cantidad, int losPares[]){


 int i, j = 0;


 for (i = 0; i < cantidad; i++){

   if (numeros[i] % 2 == 0) {

     losPares[j] = numeros[i];

     j++;

   }

 }

}

pares = filter even

int jojo(Alumno x){

 int y; int z[] = notasAlumno(x);

 for(y = 0; y < cantNotas(x) ; y++ ){ if ( z[y] < 4) return 0; } return 1;

}

int aprueba(Alumno alumno){

 int i;

 int notas[] = notasAlumno(alumno);

 for(i = 0; i < cantNotas(alumno) ; i++ ){

   if ( notas[i] < 4) return 0;

 }

 return 1;

}

aprueba(Alumno) :- forall(nota(Alumno,Nota), Nota >= 4).


En la materia Sistemas Operativos, les van a dar unas librerías que se llaman las "socommons".
Si se fijan, encontrar los pares se puede hacer declarativamente también en C.

Usando las socommons:

t_list* pares(t_list* numeros){

return list_filter(numeros, (void*) esPar);   

}


bool aprueba(Alumno alumno){

return list_all_satisfy(notasAlumno(alumno), (void*) estaAprobada);   

}



1-8 of 8