2024.2 Programação Funcional

Horários de aula: 46M56♯ [13h05–14h45]
Sala: A306
Contato:thanos@imd.ufrn.br
Playlists: FMC1 2019.2 (aulas gravadas)
Monitoria/TA: fmc.imd.ufrn.br
Turmas anteriores: ..

Info

Pré-requisitos

  • É necessário que os alunos matriculados têm tempo e vontade para estudar, fazer os trabalhos atribuídos, etc.

(Obs.: estudarler.)

Veja minhas dicas para estudantes, que inclui pré-requisitos para esta disciplina.

Experiência com programação não-funcional (disfuncional) atrapalha mas NÃO será estritamente proibida. ;)

Obs.: fluência em pelo menos um dos dois editores de texto que prestam (Vim & Emacs) ajuda em qualquer tarefa que envolve criação de arquivos de texto. Programação é uma delas.

Conteúdo

Conceitos de programação funcional, introdução ao lambda calculus, o modelo de computação de programação funcional, tipos de dados, recursão, programação de ordem superior, evaluação preguiçosa, dados infinitos, I/O, classes de tipos, monads. Raciocinando sobre programas, indução, parseando, programação com tipos dependentes.

Bibliografia e referências

Conhece o libgen?

Principal

Auxiliar

Dicas

Veja minha página de dicas para estudantes.

Links

Tecnologias & ferramentas

Obs.: As tecnologías/ferramentas seguintes podem mudar durante a disciplina—exceto a primeira. (Instalem e/ou criem uma conta para usar onde necessário.)

  1. PAPEL (um caderno para dedicar à disciplina) e LAPIS/CANETA.
  2. Zulip (leia o FAQ).
  3. A linguagem de programação Haskell;
  4. A linguagem de programação e proof assistant Agda;
  5. A linguagem de programação e proof assistant Lean 4;
  6. Git (leia o FAQ).
  7. Muito recomendado mas não necessário: Neovim e Emacs (alternativa popular: VS Code).
  8. Muito recomendado mas não necessário: um sistema Unix (veja o minicurso Unix 2019.2).

Como instalar tudo isso? Leia o FAQ.

Regras

  1. Nunca escreva ou diga algo que você mesmo não sabe explicar: (i) o que significa; (ii) seu papel na tua resolução. Por exemplo: um aluno escreveu a frase seguinte na sua demonstração: «Como f é cancelável pela esquerda temos que g=h». Ele deve saber o que significa ser cancelável pela esquerda e também explicar como isso foi usado e/ou o que isso tem a ver com essa parte da sua demonstração.
  2. Qualquer trabalho ou resposta dada poderá ser questionado em forma de prova oral, em modo privado ou aberto. Se um aluno não consegue explicar o que ele mesmo escreveu numa resolução, será considerado plágio (veja abaixo).
  3. Participando, nunca dê uma resposta que tu não pensou sozinho, exceto dando os devidos créditos correspodentes.
  4. Não tente “forçar a barra” perguntando ou respondendo coisas aleatórias com objetivo de ganhar pontos. Os pontos de participação não correspondem em apenas perguntas ou dúvidas que mostram interesse. O interesse é implícito pelo fato que tu escolheu matricular nesta turma—não vale pontos.
  5. Não procurem resoluções em qualquer lugar fora dos indicados em cada homework. O único recurso automaticamente aceitável para procurar ajuda é no nosso Zulip (especificamente seus canáis públicos—não DM) e a monitoria.
  6. Proibido consultar o apêndice de resoluções do fmcbook durante a disciplina exceto quando for explicitamente permitido por mim. (Os apêndices de dicas são permitidos sim!)

Uns deveres dos alunos

  1. Visitar este site e o Zulip da disciplina pelo menos uma vez por dia durante o semestre. (Qualquer coisa postada no site ou no Zulip da disciplina será considerada como conhecida por todos os alunos da turma.)
  2. Estudar o conteúdo lecionado e tentar resolver todos os trabalhos atribuidos.
  3. Participar no Zulip diariamente, compartilhando tuas resoluções para receber feedback, e checando as resoluções de outros colegas para dar feedback.
  4. Checar e atender seu email cadastrado no SIGAA pelo menos uma vez por dia durante o semestre.
  5. Participar nas aulas! Obs.: tendo uma dúvida durante a aula, levante a mão para solicitar “a fala” e assim que a receber, pergunte! Não espere o fim da aula para discutir tua dúvida em “modo particular”! A maioria das vezes eu vou negar isso e pedir ao aluno iniciar a discussão no Zulip ou na próxima aula.
  6. Participar no Zulip diariamente, compartilhando tuas resoluções para receber feedback, e checando as resoluções de outros colegas para dar feedback.
  7. Participar nas aulas de exercícios de monitoria e utilizar seus horários de atendimento para tirar dúvidas.

(Veja também os FAQs relevantes.)

Sobre plágio

  1. Plágio detectado implica que o aluno será reprovado na disciplina imediatamente por nota e por faltas.
  2. Entregar tuas resoluções para um aluno copiar é proibido do mesmo jeito, e também não ajuda mesmo ninguém.

Cadernos vs. celulares

Não faz sentido aparecer na aula sem caderno. E não faz sentido aparecer na aula com celular ligado; bote no modo avião antes de entrar na sala. As aulas são interativas e se não pretende participar e concentrar nesses 100 minutos, sugiro ficar fora e escolher uma outra maneira de passar teu tempo. Não é necessário (e obviamente nem suficiente) aparecer nas minhas aulas para passar.

Avaliação e faltas

Disclaimer. Eu suponho que os alunos desta turma escolheram se matricular por interesse em aprender seu conteúdo. O ideal seria ignorar assuntos irrelevantes de avaliação, presenças, carga horária, etc., e se jogar nos estudos e nas brigas (nas aulas, no Zulip, e na monitoria).

Avaliação

A nota final de cada aluno vai ser principalmente baseada em um ou mais dos: (i) provas escritas; (ii) sua participação; (iii) trabalhos atribuidos; (iv) hw resolvidos (veja o FAQ relevante).

Presenças e faltas

A presença pela regulação da UFRN é obrigatória. Os alunos que não gostam/querem/podem aparecer nas minhas aulas ainda têm chances de ganhar até nota máxima e aprovar na disciplina. Ou seja: alunos que escolhem não participar ou aparecer nas aulas, e mesmo assim aparecem nas provas escritas e conseguem nota final de aprovação vão ter sua porcentagem de faltas ajustada para não reprovar por faltas. Esclarecimento: alunos que não conseguem nota final de aprovação não terão sua porcentagem de presença ajustada de jeito nenhum e por nenhum motivo.

Obviamente, alunos que não aparecem nas aulas não terão como ganhar pontos de participação em aula—duh!—nem pontos de possíveis provas-surpresas.

As presenças/faltas serão cadastradas usando o sistema Plickers (veja o FAQ relevante).

Atrasados

Definição (atrasado). Seja $a$ aluno desta turma. Dizemos que $a$ é atrasado sse $a$ não está já sentado na sua mesa, com seu caderno já aberto, seu celular já desligado e na mochila, no momento que a aula começa.

Tentem estar presentes na sala da aula ANTES do horário do seu começo, e fiquem até o fim da aula.

Caso que alguém chega atrasado: não faz sentido bater na porta da sala de aula; não faz sentido cumprimentar nem o professor (não é mostra educação cumprimentar nesse caso—pelo contrário!) nem os amigos/colegas da aula. Entrando numa sala onde a aula já começou, tentem fazer sua entrada o menos possível notada por os participantes pois atrapalha a concentração de todos.

FAQs

Dynamic content

Pontos de participação

Provas

Provas surpresa. Note que em qualquer aula pode ter prova surpresa, cujos pontos são considerados «pontos extra», assim sendo possível tirar nota máxima (100), mesmo perdendo todas as provas surpresas.

Provas não-surpresa. Tais provas serão avisadas com curtíssima antecedência (de pelo menos 16h). A melhor maneira de lidar com isso é tratar todo dia de aula como possível dia de prova.

Prova 1

Sem informações por enquanto.

Prova 2

Sem informações por enquanto.

Homework (HW)

Leia bem o FAQ sobre hw. Note também que:

  • Homeworks são atribuidos também durante as aulas e no Zulip.
  • Homeworks marcados assim são auxiliares; tente apenas se tu tem resolvido uma parte satisfatória dos outros.

Histórico

2024-09-25: Meta & Intro

  • Linguagens de programação

2024-09-27: Tipos

  • (→) e (×)

2024-10-02: Tipos

  • de buracos para (↦) para λ
  • currificação
  • duas definições de double : Int → Int
  • números vs numerais
  • 4 maneiras diferentes de definir o tipo Nat

2024-10-04: Nat

  • o que «aridade» pode significar: currificamente ou descurrificamente
  • o modelo computacional de programação funcional
  • uma definição de soma: _+_ : ℕ → ℕ → ℕ
  • 2 + 3 = 5
  • 2 + 3 ≢ 3 + 2

Futuro (fluido)

2024-10-09

2024-10-11

2024-10-16

2024-10-18

2024-10-23

2024-10-25

2024-10-30

2024-11-01

2024-11-06

2024-11-08

2024-11-13

2024-11-22

2024-11-27

2024-11-29

2024-12-04

2024-12-06

2024-12-11

2024-12-13

2024-12-18

2024-12-20

2025-01-08

2025-01-10

2025-01-15

2025-01-17

2025-01-22

2025-01-24

2025-01-29

2025-01-31

Last update: Mon Oct 7 04:53:08 -03 2024