6902 Paradigma de Programação Lógico e Funcional
Edição 2013/2 - Ciência da Computação
Nesta disciplina vamos estudar os fundamentos teóricos dos paradigmas de programação lógico e funcional e implementar programas utilizando estes paradigmas.
Veja o [programa](http://www.din.uem.br/graduacao/programas-e-criterios/6902-Paradigma de Programacao Logica e Funcional-2013.pdf ) e o [critério de avaliação](http://www.din.uem.br/graduacao/programas-e-criterios/6902-Paradigma de Program Logico e Funcional-crit 2013.pdf ) da disciplina.
Os alunos desta disciplina devem inscrever-se no grupo uem-pplf para receberem informações e discutirem o conteúdo da disciplina. Por favor, use o seu nome verdadeiro na lista para o professor poder identificá-lo.
Avaliações
- Avaliação final
- 12/12
- 3° avaliação (peso 1)
- 26/11 - Prova escrita (conteúdo: paradigma lógico).
- 4° avaliação (peso 2)
- 25/11 (até as 23h) - Trabalho resame-prolog.
- 1° avaliação (peso 1)
- 26/09 - Prova escrita (conteúdo: paradigma funcional).
- 2° avaliação (peso 2)
- 07/10 (até as 23h) - Trabalho tetris-racket.
Aulas
Paradigma Lógico
Utilizaremos como referência para estudar o Paradigma Lógico os livros
-
Programming in Prolog (não disponível online); e
-
Introdução (19/09)
- Material
-
Fundamentos (24/09, 03/10, 08/10, 10/10, 17/10)
- Material
- Notas de aula
- Exercícios (algumas soluções)
- Conteúdo
- Tutorial
- Fatos
- Consultas
- Variáveis
- Conjunções
- Regras
- Visão mais detalhada
- Constantes, variáveis e estruturas
- Igualdade
- Unificação
- Aritmética
- Escrevendo código em Prolog
- Tutorial
- Referências
- Capítulos 1 e 2 do livro Programming in Prolog
- Capítulos 1 , 2 e 5 do livro Learn Prolog Now.
- Referências complementares
- Material
-
Dados compostos (22/10, 24/10, 29/10, 31/10, 05/11)
- Material
- Notas de aula
- Exemplos
- Exercícios (algumas soluções)
- Conteúdo
- Listas
- Definição
- Construção
- Decomposição
- Receita de projeto
- Escrevendo predicados (semi) determinísticos
- Listas aninhadas
- Árvores binárias
- Otimizações
- Acumuladores
- Diferença de listas
- Listas
- Referências
- Capítulo 3 e sessão 7.5 do livro Programming in Prolog
- Capítulos 4 e 6 do livro Learn Prolog Now
- Material
-
Retrocesso e corte (07/11 e 12/11)
- Material
- Notas de aula (conforme explicado em sala, não estará disponível. Veja as referências)
- Exemplos
- Exercícios (algumas soluções)
- Conteúdo
- Retrocesso
- Geradores
- Corte
- Confirmação de escolha
- Combinação com o
fail - Gerar e testar
- Referências:
- Capítulo 4 do livro Programming in Prolog
- Capítulo 10 do livro Learn Prolog Now
- Material
Paradigma Funcional
- Introdução (16/07)
- Fundamentos (18/07, 23/07, 25/07, 30/07)
- Material
- Notas de aula
- Exemplos
- Exercícios (algumas soluções)
- Conteúdo
- Expressões primitivas e aplicação de função
- Definições de nomes
- Modelo de substituição para aplicação de função
- Avaliação estrita e não estrita
- Expressões condicionais, predicados e operadores lógicos
- Recursão com números naturais
- Referências
- Seção 1.1 do livro SICP
- Introdução rápida ao Racket
- Capítulos 1 e 2 (2.1 e 2.2) do Guia Racket
- Sobre a receita de projeto de programas, recomendo o curso Introduction to Systematic Program Design - Part 1 do cousera. Especificamente os vídeos da semana 5 e o texto "How to design functions". Este curso é baseado no livro HTDP.
- Referências complementares
- Material
- Dados compostos (01/08, 06/08, 08/08, 13/08)
- Material
- Notas de aula
- Exemplos
- Exercícios (algumas soluções)
- Conteúdo
- Pares
- Estruturas
- Listas
- Listas aninhadas
- Árvores binárias
- Referências
- Referências complementares
- Seções 3.9 e 4.1 da Referência Racket
- Seção 6.3 do livro TSPL4
- Material
- Funções (20/08, 22/08, 27/08)
- Material
- Notas de aula
- Exemplos
- Exercícios (algumas soluções)
- Conteúdo
- Criando abstração a partir de exemplos
- Funções de alta ordem (
fold,map,filter) - Definições locais e fechamentos (closures)
- Funções anônimas
- Currying
- Funções com número variado de parâmetros
- Referências
- Seções 19.1 e 20 do livro HTDP.
- Vídeos 7g a 7m da semana 7 e o texto "From Examples" do curso Introduction to Systematic Program Design - Part 1
- Seções 3.9 e 3.17 da Referência Racket
- Referências complementares
- Material
- Acumuladores (29/08, 03/09)
- Material
- Notas de aula
- Exemplos
- Exercícios (algumas soluções)
- Conteúdo
- Falta de contexto na recursão
- Processos interativos e recursivos
- Recursão em cauda
- Projetando funções com acumuladores
- Função
foldl
- Referências
- Material
- Sequências e streams (05/09)
- Material
- Notas de aula
- Exemplos
- Exercícios (algumas soluções)
- Conteúdo
- List comprehension
- Streams
- Streams infinitos
- Promessas
- Material
Links
Incentivo ao aprendizado de novas linguagens de programação
Racket
- Página da linguagem
- Guia Racket
- Página na wikipédia sobre Racket
- Livro The Scheme Programming Languague
- Página na wikipédia sobre Scheme
- Livro How to Design Programs
- Livro Structure and Interpretation of Computer Programs
- Racket Style Guide
- 99 problemas para resolver em (Prolog) Racket
Prolog
- SWI-Prolog
- Página na wikipédia sobre Prolog
- Livro Learn Prolog Now
- Tutorial de Prolog (com muitos exemplos)
- Introduction to Prolog
- Coding Guidelines for Prolog
- 99 problemas para resolver em Prolog