Este documento faz parte da Proposta 2022 de Thanos.



FUN: Programação Funcional (60h)

Esta disciplina já foi oferecida umas vezes como optativa no IMD.
Na sua última rodada eu consegui gravar todas as aulas.
Histórico com o conteudo detalhado de cada aula, exercícios, etc., está no site da turma FUN de 2019.2.

Dependências. A disciplina pode ser oferecida:

  • Um semestre antes da IRI.
  • Em paralelo com a IRI, no mesmo semestre.
  • Um semestre depois da IRI.

Não há necessidade de adicionar pré-requisito entre essas disciplinas.

Ementa

  • Programação declarativa versus imperativa.
  • Introdução ao lambda calculus, e o modelo de computação de programação funcional.
  • Avaliação preguiçosa vs estrita.
  • Tipos e classes de tipos.
  • Currificação e aplicação parcial.
  • Funções puras e efeitos colaterais.
  • Definindo novos tipos de dados algébricos.
  • O tipo Nat de naturais.
  • Listas.
  • Polimorfismo em programação funcional.
  • Funções de ordem superior: map, filter, foldl, foldr
  • Os construtores de tipos Maybe e Either.
  • Classes de tipos.
  • Programação sem pontos.
  • Dados infinitos, e dados parciais.
  • I/O.
  • Functors, applicative functors, monads.
  • Classes de tipos algébricas: monoides e semigrupos.
  • Eficiência e acumuladores.
  • Uma breve introdução à programação com tipos dependentes.
  • Aplicações.

Objetivos de aprendizagem

  1. Usar recursão e as ferramentas relevantes para definição de funções.
  2. Aprender raciocinar sobre programas e demonstrar suas propriedades usando indução estrutural e raciocínio equacional.
  3. Familiarizar com boas práticas de programação relacionadas com ou inspiradas pelo paradigma funcional.
  4. Conhecer o estilo de programação sem pontos
    https://en.wikipedia.org/wiki/Tacit_programming
  5. Pattern matching.
  6. Conhecer os conceitos principais de programação funcional, aproveitáveis até em linguagens não funcionais.
  7. Definir seus próprios tipos de dados recursivos.
  8. Apreciar os benefícios de programar com funções puras.
  9. Apreciar os benefícios de programar com funções de ordem superior.
  10. Conhecer e reconhecer abstrações freqüentemente usadas em programação funcional.
  11. Desenvolver software em linguagem de programação funcional.

Bibliografia e Referências

Principal

Auxiliar


Select a repo