Material do curso de Programação Declarativa
Hoje apresento-lhes o material de suporte que utilizei na disciplina de Programação Declarativa. Ministrei-a no último semestre de aulas na Universidade Federal de Sergipe, mais especificamente em 2011/2.
Nessa disciplina, abordamos tanto o paradigma da programação funcional, quanto o paradigma da programação lógica, e devo dizer que foi um verdadeiro desafio para mim, não somente porque já não estudava Haskell (programação funcional) há mais de cinco anos, como também porque tudo o que eu sabia de Prolog resumia-se a uma ou duas aulas que tive durante a disciplina de Inteligência Artificial, ou seja, um desafio e tanto para elaborar todo o conteúdo enquanto aprendendo, e tudo isso durante um período letivo que já havia começado atrasado!
Durante a mesma, elaborei todo o material em apresentações para Microsoft Powerpoint (formato PPT), bem como escrevi os códigos-fonte dos exemplos em arquivos separados.
Bem, no fim das contas, acredito que o curso foi muito bem aplicado e muitos aprenderam este paradigma tão diferente da programação imperativa, nossa “velha amiga”.
E aqui está a apresentação composta por todos os slides usados em aula (um total de 305 slides
) em formato PPT mais os arquivos com códigos-fonte:
Material do curso de Programação Declarativa
Abaixo encontra-se a estrutura das aulas (em outra oportunidade espero publicar aqui artigos com o conteúdo textual de cada uma dessas aulas, mas acho que vai demorar bastante até que eu tenha tempo para fazer isso!):
- Aula 01 - Paradigmas da programação
- Programação imperativa
- Programação estruturada
- Programação orientada a objetos
- Programação concorrente
- Programação declarativa
- Programação funcional
- Programação lógica
- Programação restritiva
- Linguagens de programação multiparadigma
- Programação imperativa
- Aula 02 - Introdução à programação funcional
- O que é uma função?
- Exemplos de funções
- Tipos de dados
- A linguagem Haskell
- Hugs 98
- WinHugs
- Exemplo de programa
- Exercícios
- Aula 03 - Tipos básicos e definições
- Booleanos / lógicos
- Inteiros
- Caracteres
- Fracionários
- Indentação do código
- Sobrecarga
- Identificadores
- Palavras reservadas
- Exercícios
- Aula 04 - Projetando e escrevendo programas
- Eu sei exatamente o que preciso fazer?
- Quais tipos de dados são necessários?
- Que informações já possuo?
- Posso dividir o problema em partes menores?
- Posso usar recursão para resolver meu problema?
- Exercícios
- Aula 05 - Tuplas, listas e strings
- Tuplas
- Listas
- Strings
- Declaração de tipos
- Funções genéricas
- Exercícios
- Aula 06 - Definições locais
- Definições locais
- Cláusula where
- Expressão let
- Escopo
- Aula 07 - Funções sobre listas
- Definições por casamento de padrões
- A construção case
- Recursão primitiva sobre listas
- Exercícios
- Aula 08 - Padrões de computação e funções de alta ordem
- Padrões de computação sobre listas
- Mapeamento (mapping)
- A função map
- Filtragem (filtering)
- A função filter
- Redução (folding)
- A função foldr1
- A função foldr
- Funções de alta ordem
- Aula 09 - Funções como valores
- Definição a nível de função
- Composição de funções
- Cuidados com as composições
- Expressões definindo funções
- Notação Lambda
- Aplicação parcial
- Seção de operador
- Currying e Uncurrying
- Exercícios
- Aula 10 - Polimorfismo e classes de tipos
- Polimorfismo paramétrico e sobrecarga
- Função de ordenação - caso 1
- Classe de tipos
- Função de ordenação - caso 2
- Definição de uma classe e de uma instância
- Exercícios
- Aula 11 - Tipos algébricos
- Por que tipos algébricos?
- Introduzindo tipos algébricos
- Tipos enumerados
- Tipos produtos
- Tipos alternativos
- Definição geral de um tipo algébrico
- Derivando instâncias de classes
- Tipos algébricos recursivos
- Construtores infix
- Tipos algébricos polimórficos
- Aula 12 - Tipos abstratos de dados
- Por que tipos abstratos de dados?
- Exemplo de um TAD
- Introduzindo newtype
- Instanciando classes
- Exercícios
- Aula 13 - Avaliação preguiçosa
- Definição
- Exemplos
- Pontos-chave da avaliação preguiçosa
- Cálculo para casamento de padrões
- Cálculo para guardas
- Cálculo para definições locais
- Aula 14 - Introdução à programação lógica
- O que é programação lógica?
- Exemplos de inferência
- Bases da programação lógica
- Aplicações
- Vantagens e desvantagens
- A linguagem Prolog
- Instruções em Prolog
- Exemplo de programa e consulta
- Variáveis em Prolog
- Formas de declaração de fatos
- Observações sobre declaração de fatos
- Formas de consultas
- Operadores
- Conjunção
- Disjunção
- SWI-Prolog
- Comandos trace e notrace
- Exercícios
- Aula 15 - Recursividade
- Introdução
- Operador cut ( ! )
- Comando fail
- Operador not
- Exercícios
- Aula 16 - Listas
- Introdução
- Manipulando listas
- Predicado member
- Predicado append
- Predicado length
- Exercícios
- Aula 17 - Aritmética
- Série de exercícios envolvendo cálculos aritméticos
Apesar de serem enumeradas aqui como sendo 17 aulas, algumas delas requereram mais de um dia de aula e cada dia de aula na verdade são duas horas-aula, totalizando assim as 60 horas-aula da disciplina de Programação Declarativa.







, ou seja, a matriz de pesos W é igual ao produto externo dos vetores s e t.





















