Cálculo de Programas

Licenciaturas em Engenharia Informática e Ciências da Computação

Tópicos

Avisos

27 Set - Classificações do exame da época especial: estão disponíveis na secção Alunos

13 Set - Exame da época especial: 15-Set-2010, 14h00-17h00, sala 2303.

26 Jul - Classificações finais, após exame de recurso: estão disponíveis na secção Alunos

11 Jul - No Material encontra-se uma nova versão do PDF do teste de 18-Jun com a resolução das questões que têm suscitado mais dúvidas.

08 Jul - detalhes sobre exame de recurso: 12-Jul, das 14h00 às 16h30, salas 2201, 2202, 2203 e 2204. (Ver também calendário oficial)

05 Jul - atenção aos transparentes sobre monadificação que estão no material da disciplina (ficheiro EasyMonads.pdf)

02 Jul - as classificações à data do teste de 18-Jun serão afixadas amanhã (3-Jul) de manhã.

23 Jun - o exame de recurso terá lugar dia 12-Jul (detalhes a anunciar).

14 Jun - O docente das aulas teóricas estará disponível no Lab. 1.04 para tirar dúvidas para o teste nas tardes de 3ª-feira (16h30-18h30) e 4ª-feira (14h-16h).

14 Jun - o formato do teste de 18-Jun encontra-se aqui. Ver as instruções relativas à diferença entre os métodos A e B.

11 Jun - Notas (Método A): estão disponíveis em Alunos. Os alunos que não obtiveram a nota mínima devem apresentar-se a recurso.

11 Jun - Teste individual: terá lugar a 18-Jun, das 11h00-13h30, nas salas Salas 2111, 2201, 2202, 2203, 2204, 2205 e 2209.

07 Jun - Questões (Método A): estão disponíveis no material pedagógico.

04 Jun - Teste de CP: terá lugar de hoje a quinze dias, 18-Jun de manhã, em local/hora a anunciar aqui.

04 Jun - Teóricas do dia 11-Jun: serão substituidas por aula prática de compensação, na mesma sala.

01 Jun - Turno TP/LCC: a aula extra deste turno será dia 2-Jun, das 15 às 18, no anfiteatro DI-A1.

28 Mai - Turno TP-4: haverá uma aula complementar da de hoje no dia 02-Jun, 15h-17h (na mesma sala).

20 Mai - Turno TP(5)/B: não haverá aula amanhã dia 21-Mai, 16h-18h, devido a uma reunião do docente na Universidade do Porto. A aula será compensada na próxima 6ª-feira, dia 28-Mai, das 18h-19h30.

19 Mai - Turno de LCC: haverá uma aula extra no dia 02-Jun, 14h-17h.

07 Mai - Turno TP-2: haverá uma aula de substituição da de ontem 4.a-feira dia 19-Mai, 15h-17h (na mesma sala).

07 Mai - Método A: as QAIs nrs.5+6 terão lugar nos turnos dos dias 27-Mai, 28-Mai e 31-Mai.

07 Mai - Método A: a QAI nr.4 terá lugar nos turnos dos dias 20-Mai, 21-Mai e 24-Mai.

30 Abr - A aula teórica do dia 4-Maio será substituída por uma de SO.

18 Abr - Ao contrário de que foi anunciado, os turnos de 5ª-feira (22-Abr) de LCC e o turno TP-05 de 23-Abr (LEI) funcionarão regularmente. Nos de LCC haverá avaliação (alunos do Método A).

13 Abr - Método A: a QAI nr.3 terá lugar nos turnos dos dias 22-Abr, 23-Abr e 26-Abr.

08 Abr - Turno TP-2: haverá uma aula de substituição da de hoje na próxima 4.a-feira dia 14-Abr, 15h-17h (na mesma sala).

06 Abr - Método A: a QAI nr.2 terá lugar nos turnos dos dias 15-Abr, 16-Abr e 19-Abr.

11 Mar - Método A: primeira Questão para Avaliação Individual (QAI nr.1) terá lugar nos turnos da semana 22-Mar a 26-Mar.

04 Mar - Já só há 4 vagas para o Método A, no turno TP-2.

01 Mar - A aula de amanhã, 02-Mar, será (execpcionalmente) de 2 horas, das 9h00 às 11h00, no anfiteatro CP2 103.

26 Fev - Há 10 vagas por preencher, ver Alunos

24 Fev - Anuncia-se que estão abertas mais 4 vagas em cada turno (LEI, TP-1 a TP-4). Importante: os pedidos de troca serão considerados por ordem de chegada, mas só aqueles que seguirem as instruções que constam em Alunos. Todos os outros serão ignorados.

23 Fev - Estão já publicadas as inscrições nos turnos TP-1 a TP-4 (LEI)

23 Fev - As aulas práticas começam 2ª-feira, dia 29 (LEI) e dia 4 (LCC)

19 Fev - As aulas teóricas começam 3ª-feira, dia 23 (LEI) e dia 26 (LCC)

Programa resumido

  • Motivação. Teoria e método em programação. Cálculo e raciocínio sobre programas. Composicionalidade. Combinadores de programas. Modularidade e reutilização. «Pacotes» de programação.

  • Programação funcional: sua motivação e antecendentes históricos. Composição de funções. Noções de abstracção e de isomorfismo.

  • Iniciação à estruturação de dados. Combinadores básicos e suas propriedades estruturais (reflexão, fusão, absorção, cancelamento e de functorialidade). Álgebra de um tipo de dados. Lei da troca.

  • Introdução às estruturas de dados indutivas regulares. Álgebras de functores. A triologia «cata-ana-hilo». Recursividade polinomial. Caso de estudo: algoritmos de ordenação.

  • Regras para codificação de estruturas de dados funcionais na linguagem de programação C.

  • Parametrização e polimorfismo. Inferência de tipos polimórficos. Programação genérica. Functores de tipo. Introdução ao politipismo.

  • Programação modular.

  • Programação funcional com mónades. `Input/output'. Excepções.

Programa detalhado

1. Teoria e método em programação. Concepção composicional e reutilização. Combinadores de programas. Modelação funcional de problemas.

2. Introdução à Programação funcional. Conceito de função. A função como contrato. Diagramas de blocos. Domínio e codomínio de uma função. Igualdade extensional. Diagramas funcionais. Recurso a setas f : A -> B e diagramas. Notação funcional com ou sem variáveis.

3. Combinadores de programas funcionais. A composição f · g como combinador elementar de funções. Associatividade da composição: Função identidade id. O polimorfismo de id e a propriedade f ·id = id ·f = f e seu diagramas comutativo. O combinador <f,g> e o produto A × B (analogia com «struct» em C) e suas projecções. O combinador [f,g] e o coproduto A + B (analogia com «union» em C) e suas injecções. Os combinadores f × g e f + g . Noção de isomorfismo entre tipos de dados. Funções bijectivas ou isomorfismos. Função inversa. Predicados e guardas. Condicional de McCarthy.

4. Álgebra da programação funcional. Inferência de tipos polimórficos com recurso a diagramas. Propriedades naturais e propridades universais. Propriedades de reflexão. Propriedades de cancelamento e fusão. Lei da troca. Propriedades de absorção e propriedades functoriais. Leis de fusão do condicional de McCarthy.

5. Programação funcional em HASKELL. Costumização de produtos e coprodutos. Álgebras e coálgebras de tipos de dados. O conceito de «apontador» 1 + A (Maybe a em HASKELL). Funções parciais.

6. Programação com tipos de dados indutivos. Tipos de dados recursivos vistos como equações. Os número naturais e a equação N =1 + N. As listas ligadas e a equação L = 1 + A × L. Noção de combinadores recursivos. Exemplos: catamorfismos e anamorfismos. Hilomorfismos (anamorfismos seguidos de catamorfismos). Apresentação do módulo List.hs. Estudo da triologia cata-ana-hilo associada ao tipo List. O algoritmo de cálculo do quadrado de um número visto como hilomorfismo sobre a estrutura List a. O algoritmo de ordenação por inserção simples visto como hilomorfismo sobre a estrutura List a. Introdução ao tipo de dados árvores binárias simples, ou listas bi-lineares. Estudo da triologia cata-ana-hilo associada ao tipo BTree. Exemplo: o hilomorfismo qSort (`quick sort'). Estudo da triologia cata-ana-hilo associada ao tipo LTree. Exemplos: o hilomorfismo fib (série de Fibonacci) e o hilomorfismo mSort (`merge sort').

7. Definição genérica de um tipo indutivo de dados. Noção de functor de base. Operadores fmap vs catamorfismos: Politipismo da definição T a = B(a,T a) de um tipo indutivo genérico paramétrico. Noção de functor de tipo e sua formulação genérica como o catamorfismo T f =cata (in ·B(f,id)). Propriedade universal de um catamorfismo cata (f) do tipo genérico T a =B(a,t a) e suas derivadas: cancelamento-cata e reflexão-cata.

8. Classificação algorítmica. Quadro sinóptico dos principais algoritmos analisados e estudados ao longo da disciplina. Polimorfismo versus politipismo. Programação dita «genérica».

9. Programação funcional monádica. Motivação: funções parciais e sua composição. Manipulação de erros e mecanismos de excepção («exception handling»). Funções monádicas envolvendo listas. Mónadas versus functores. Noção de functor. Propriedades functoriais. Functores em HASKELL: a class Functor e o operador fmap. Regra geral para a composição monádica. Definição formal de mónade. Composição e sua unidade. Multiplicação e suas propriedades. Exemplos: listas e Maybe. Mónadas em HASKELL: a class Monad e os operadores return, (»=) e ». A notação do. Introdução à notação em compreensão. A definição fmap f x = do { a <- x ; return (f a) }. Regras para a monadificação de funções arbitrárias com recurso à notação "do".

r4 - 12 Jan 2011 - 17:45:20 - JoseNunoOliveira
This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. Ideas, requests, problems? Send feedback.
Syndicate this site RSSATOM