Este repositório contém notas de aulas (e código fonte) usados durante um curso sobre Tipos e Linguagens de Programação, conduzido no semestre 2017/2 em uma disciplina sobre Linguagens Declarativas- Programa de Pós-graduação em Informática (UnB)
- Livro Types and Programming Languages (B. Pierce)
Sugestões de leitura adicionais:
-
Software Foundations (B. Pierce)
-
Practical Foundations of Programming Languages (R. Happer)
-
Computation and Deduction (F. Pfenning, http://www.cs.cmu.edu/~twelf/notes/cd.pdf)
-
An Introduction to Functional Programming Through Lambda Calculus (G. Michaelson)
-
Real World Haskell (B. O'Sullivan, et al.)
-
Programming in Haskell (G. Hutton)
Estão previstos dois projetos na disciplina, cada um com duas entregas.
a) Elabore um resumo com uma discussão sobre alfa-equivalência, destando (a) o porquê de termos que aplicar conversões alfa no calculo lambda e (b) apresentando a implementação de um algoritmo para conversão alfa (aplicado na nossa implementação do cálculo lambda).
b) Implemente um tradutor entre as linguagens RBL-Calculus e o Lambda Calculus, usando como base as implementações em sala de aula. Para isso, implemente uma biblioteca de funções para o Lambda Calculus, incluindo funções para representar valores e operadores envolvendo booleanos e inteiros.
c) Implemente cenários de teste para a nossa linguagem de Lambda Calculus, em particular cenários que exercitam o fix-point combinator para definir funções recursivas.