Programación Funcional

Información Básica

  • Créditos: 4
  • Horas de Clase: 5 / semana (3 horas de clase, 2 de taller)
  • Horas de trabajo independiente: 7 / semana
  • Prerequisitos: Fundamentos de Matemáticas (300MAG018).
  • Tipo de curso: Núcleo de Formación Fundamental.

Descripción del Curso

El curso de Programación funcional presenta los fundamentos de la lógica, conjuntos, funciones, estructuras discretas básicas, principios de conteo y relaciones de recurrencia con el fin de que el estudiante conozca los fundamentos matemáticos que sustentan la práctica de la computación. El curso trata también las nociones básicas del modelo funcional, en particular el principio de computación como evaluación, incluyendo el cálculo lambda, Para que el estudiante aprecie la programación sin efectos de borde, entienda la correspondencia entre los fundamentos de inducción matemática y la recursión, y pueda desarrollar las bases para entender la semántica de los lenguajes de programación.

Objetivos

Al finalizar el curso los participantes podrán:

  1. Describir los conceptos básicos de la lógica, conjuntos, funciones y las diferentes técnicas demostrativas.
    1. Determinar si un enunciado es una proposición.
    2. Usar operadores lógicos para formar proposiciones compuestas y verificar equivalencias lógicas.
    3. Enunciar proposiciones usando funciones proposicionales y cuantificadores.
    4. Traducir frases del lenguaje natural al lenguaje formal.
    5. Demostrar teoremas utilizando reglas de inferencia y métodos de demostración.
    6. Realizar operaciones sobre conjuntos.
    7. Demostrar relaciones generales sobre conjuntos.
    8. Identificar funciones y demostrar enunciados matemáticos que involucren funciones.
    9. Evaluar el desempeño de soluciones mediante la comparación de funciones que las describen.
  2. Describir las propiedades esenciales de los números enteros.
    1. Demostrar propiedades de divisibilidad de enteros y de los números primos.
    2. Describir y demostrar propiedades básicas de las congruencias de enteros.
    3. Escribir enteros en distintas bases.
    4. Usar el algoritmo de Euclides para hallar el máximo común divisor entre dos enteros.
    5. Ilustrar algunas aplicaciones de la teoría de números.
  3. Definir y demostrar propiedades inductivamente y recursivamente.
    1. Identificar sucesiones y sumatorias.
    2. Realizar demostraciones utilizando inducción matemática.
    3. Construir funciones, conjuntos y estructuras recursivamente.
    4. Aplicar inducción estructural para demostrar algunos resultados matemáticos.
  4. Utilizar las técnicas básicas de conteo.
    1. Calcular el número de elementos de un conjunto utilizando las técnicas fundamentales de conteo.
    2. Aplicar el principio del palomar para mostrar la existencia de un objeto que cumple una propiedad dada.
  5. Describir relaciones de recurrencia.
    1. Definir sucesiones mediante una relación de recurrencia.
    2. Resolver relaciones de recurrencia lineales con coeficientes constantes.
    3. Calcular la relación de recurrencia para un algoritmo simple.
  6. Entender los principios de la programación funcional.
    1. Programar mediante composición funcional.
    2. Aplicar correspondencia de patrones en construcción de funciones
    3. Entender el uso de funciones como datos.
  7. Saber aplicar la programación funcional de alto orden.
    1. Usar clausuras para representar la noción de estado.
    2. Aplicar la evaluación parcial
    3. Entender el chequeo estático para analizar programas funcionales.
    4. Conocer el los principios del cálculo lambda y su relación con prog. funcional
    5. Entender el cálculo lambda como modelo general de computación

Se desarrollan competencias en

Contenido

Capítulo 1: Fundamentos: Lógica y demostración, conjuntos y funciones

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
1,2,3 6 4 Lógica, equivalencias proposicionales, predicados y cuantificadores. [1, cap. 1]
4,5 2 1 Métodos de demostración. [1, cap. 1]
6 1 Conjuntos. [1, cap. 1]
7 1 1 Operaciones entre conjuntos. [1, cap. 1]
8 1 1 Funciones. [1, cap. 1]
9 1 1 Crecimiento de funciones [1, cap. 2]

Total de Horas: 20.

Sesión Horas de trabajo independiente Temas Bibliografía
1-9 28 Tareas semanales, resolución de problemas en temas vistos [1, cap. 1,2]

Capítulo 2: Números enteros

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
11 1 Enteros y división, aritmética modular [1, cap. 2]
13 1 Representación de enteros, el algoritmo de Euclides. [1, cap. 2]
14 1 2 Algunas aplicaciones de la teoría de números. [1, cap. 2]

Total de Horas: 5.

Sesión Horas de trabajo independiente Temas Bibliografía
11-14 13 Tareas semanales, resolución de problemas en temas vistos [1, cap. 2]

Capítulo 3: Inducción y recursividad

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
15,16 3 2 Sucesiones y sumatorias. Inducción matemática. [1, cap. 3]
17 3 2 Definiciones recursivas e inducción estructural. [1, cap. 3]

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
15-17 14 Tareas semanales, resolución de problemas en temas vistos [1, cap. 3]

Capítulo 4: Recuento

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
18,19 3 2 Fundamentos de combinatoria, Principios del palomar. [1, cap. 4]
20,21 3 2 Permutaciones y combinaciones, Coeficientes binomiales [1, cap. 4]

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
18-21 14 Tareas semanales, resolución de problemas en temas vistos [1, cap. 4]

Capítulo 5: : Relaciones de recurrencia

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
23 3 2 Relaciones de recurrencia. [1, cap. 6]
24 3 2 Resolución de relaciones de recurrencia. [1, cap. 6]

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
23,24 14 Tareas semanales, resolución de problemas en temas vistos [1, cap. 6]

Capítulo 6: Introducción a la programación Funcional

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
25 1 Programar con funciones, variables inmutables
26 2 2 Despacho por patrones, composición funcional
27 3 2 Funciones de primer orden, clausuras

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
25-27 14 Tareas semanales: resolución de problemas y ejercicios de programación

Capítulo 7: Programación funcional de alto orden

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
28 1 “Currying”, aplicación parcial
29 2 2 Iteradores, “map”, filtros
30 1 Análisis estático, chequeo de errores
31,32 5 4 El Cálculo lambda

Total de Horas: 15.

Sesión Horas de trabajo independiente Temas Bibliografía
28-29 10 Tareas semanales: ejercicios de programación
30-32 17 Tareas semanales: resolución de problemas en el cálculo lambda

Integración Curricular

Resultados de Programa (ABET)

(A) La habilidad para aplicar conocimientos de matemáticas, ciencias e ingeniería.

(B) La habilidad para analizar un problema e identificar los requerimientos necesarios para su definición y solución.

(C) La habilidad para diseñar, implementar y evaluar procesos y sistemas computacionales.

(D) La habilidad para funcionar en equipos de trabajo.

(E) El entendimiento de la responsabilidad profesional y ética.

(F) La habilidad para comunicarse efectivamente.

(G) La habilidad para analizar los impactos de la computación y la ingeniería en las personas, organizaciones y la sociedad.

(H) El reconocimiento de la necesidad de, y la habilidad para, continuar con el desarrollo profesional.

(I) La habilidad para usar las técnicas, destrezas y herramientas modernas para la práctica de la computación.

(J) La habilidad para aplicar los fundamentos y principios de las matemáticas y de la computación en el modelamiento y diseño de sistemas computacionales de manera que se demuestre comprensión de las ventajas y desventajas en las decisiones de diseño.

(K) La habilidad para aplicar los principios de diseño y desarrollo de software en la construcción de sistemas de diferente complejidad.

Relevancia del curso con los resultados de programa

Resultados de Programa
A B C D E F G H I J K
Relevancia 5 2 3

Escala: (1) baja relevancia - (5) alta relevancia.

Integración de objetivos, contenido y metodología del curso

El curso es presencial y con participación y trabajo en clase. Se asignarán trabajos, ejercicios y lecturas. Durante la sesión se expondrán los conceptos acompañados de ejemplos, se fomentará la participación de los estudiantes. Se realiza un taller semanal en el que se aplican los fundamentos teóricos.

Resultados del Programa Indicadores de Desempeño Objetivos/Contenido del Curso Actividades de aprendizaje Instrumentos de medición
(A) Aplicación de Conocimientos (A1) Identificar los fundamentos científicos y los principios de ingeniería que rigen un proceso o sistema. (Conocimiento) (A2) Resolver problemas relacionados con la disciplina y otras áreas por medio de la utilización de conocimientos, modelos y formalismos de las ciencias de la computación, las matemáticas y la ingeniería. (Aplicación) (A4) Interpretar modelos matemáticos para estimar su precisión y confiabilidad. (Comprensión) Todos Exposiciones del profesor, solución de ejercicios, talleres. Exámenes y tareas.
(I) Uso de herramientas y técnicas (I2) Utilizar herramientas de diseño, modelamiento y simulación. (Aplicación). . 1.9, 2.5, 3.3, 5.2, 6, 7 Exposiciones del profesor, tareas. Trabajos escritos y de programación.
(J) Modelamiento y diseño de sistemas computacionales (J1) Reconocer la importancia del modelamiento cuando se resuelve un problema. (Compresión).. (J2) Relacionar conceptos y principios teóricos para la resolución efectiva de un problema. (Síntesis). (J4) Evaluar decisiones de diseño basándose en principios matemáticos y de computación. (Evaluación). 1.4, 1.5, 1.7, 1.8, 2.1, 2.2, 3.2, 3.4, 4.2, 5.1, 5.3, 6, 7 Exposiciones del profesor, solución de ejercicios, talleres. Exámenes y tareas.

Contribución al Desarrollo de Competencias (CNA)

Resultados de Programa
Comunicación escrita U
Lectura crítica E
Inglés U
Razonamiento cuantitativo E

Contribución a los objetivos educacionales

La Carrera de Ingeniería de Sistemas y Computación plantea los siguientes objetivos educacionales, El estudiante graduado de la carrera será capaz de:

  1. Ejercitar la práctica de la Ingeniería de Sistemas y Computación profesionalmente.
  2. Diseñar y operar sistemas de computación que contribuyen a la solución de problemas relacionados a la disciplina, otra área de la ciencia y la ingeniería u otras disciplinas.
  3. Contribuir al bienestar de las comunidades desde posiciones prominentes en la industria, academia, sector público o como un emprendedor.
  4. Ser distinguido por su bases sólidas en computación, su sentido de ciudadanía responsable, su profesionalismo y liderazgo.
  5. Continuar su desarrollo profesional o involucrarse en estudios de posgrado.
Resultados de Programa
A B C D E F G H I J K
Objetivo 1 X X X
Objetivo 2 X X X
Objetivo 3
Objetivo 4X X X
Objetivo 5 X X X

Recomendaciones del Director del Programa

Reglas del curso

Calificación y Balance de Evaluación del Curso

Instrumento Porcentaje A B C D E F G H I J K
Parcial I 25% 15%
Parcial II 25% 15% 5%
Parcial III 25% 15% 10% 15%
Talleres y Tareas 25% 5% 5% 15%

Uso de material en exámenes

Asistencia

Es obligatoria

Bibliografía

  1. Rosen, Kenneth H. Matemática Discreta y sus aplicaciones. Editorial McGraw Hill. Quinta Edición 2004.
  2. Cousineau, Guy and Michel Mauny. The Functional Approach to Programming. Cambridge, UK: Cambridge University Press, 1998.
  3. Felleisen, Matthias; Findler, Robert; Flatt, Matthew; Krishnamurthi, Shriram (2001). How to Design Programs. MIT Press.
  4. Bruce J. Maclennan. Functional Programming: Practice and Theory. Addison-Wesley (1990).
  5. Robert Harper. Programming in Standard ML. http://www.cs.cmu.edu/~rwh/isml/book.pdf

Instalaciones

Salón de clase con computador y proyector.

Material de este semestre

 
materias/programacionfuncional.txt · Última modificación: 2016/08/23 00:10 por anavarro
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki