Turmas: DA1MCCC015-23SA e NA1MCCC015-23SA
Professor: Emilio Francesquini
E-mail: e.francesquini@ufabc.edu.br
Esse oferecimento da disciplina será completamente presencial, incluindo aulas, plantões e avaliações. Contudo, o professor poderá responder a eventuais questionamentos e dúvidas no servidor do Discord no canal da disciplina cujo endereço está disponível abaixo.
Todo o material das aulas é disponibilizado online segundo a Licença Creative Commons Atribuição-NãoComercial 4.0 Internacional (CC-BY-NC).
Inscreva-se o quanto antes no servidor do Discord da disciplina (https://discord.gg/JSgnfdE). Todos os anúncios e comunicações serão feitos por lá.
Teremos Quizzes quinzenais, feitos em sala de aula com exercícios sobre o conteúdo apresentado. As entregas destes quizzes serão consideradas como uma avaliação e deverão ser feitas durante a aula. As notas dessas atividades serão utilizadas para a composição da média final. Teremos também dois projetos de programação que serão usados para compor a nota final. Veja mais sobre o critério de avaliação aqui.
Turma | Quarta | Sala | Sexta | Sala | |
---|---|---|---|---|---|
DA1MCCC015-23SA | 10h-12h | A-108-0 | 08h-10h | A-108-0 | |
NA1MCCC015-23SA | 21h-23h | A-108-0 | 19h-21h | A-108-0 |
Presencial
Online
MCCC015-23 Programação Funcional
Objetivos
Apresentar noções básicas e intermediárias sobre paradigma funcional não-tipado (cálculo lambda) e tipado. Ensinar os conceitos fundamentais como funções, recursão, recursão de cauda, sistemas de tipos, álgebra de tipos, polimorfismo, funções de alta ordem, abstração, tratamento de efeitos colaterais, e conceitos elementares da teoria dos tipos e das categorias aplicados na programação funcional. Para tanto, será utilizada uma linguagem estritamente funcional moderna ou que estimule o uso dos conceitos desse paradigma.
Conteúdo Programático
Paradigma funcional e imutabilidade. Cálculo lambda. Funções, recursão, recursão de cauda. Funções de alta ordem e currying. Tipos de Dados Algébricos. Polimorfismo ad-hoc e paramétrico. Semigrupos e monoides. Funtores e mônadas. Tratamento de efeitos colaterais com mônadas. Estruturas de dados funcionais.
Fonte: Catálogo de Disciplinas 2023/2024
ATENÇÃO - A prova de recuperação será feita durante as duas primeiras semanas do Q3, com a data a ser combinada com os interessados.
Listas de exercícios para estudos:
Exemplos dos exercícios que podem cair nos quizzes podem ser vistos nas playlists com a resolução de todas as listas dadas nos oferecimentos anteriores da disciplina podem ser encontradas aqui:
O projeto pode ser feito em grupos de no máximo 3 pessoas
Todos os commits e o push final devem ter sido feitos até no máximo às 23h59 do respectivo dia de entrega..
Dias em atraso | Nota máxima |
---|---|
1 dia | 7 |
2 dias | 6 |
3 dias | 5 |
>3 dias | 0 |
No mesmo repositório do seu código, deverá haver um relatório de
no máximo 1 páginas (em PDF! nada de .md
, .docx
, .odt
, ou
qualquer outro formato da moda…) descrevendo:
stack run
)
o seu códigoO seu relatório também deverá conter obrigatoriamente um link para um vídeo que:
Durante a correção o professor pode pedir por esclarecimentos adicionais.
**Que tipos de projetos serão aceitos? **
Lembre-se que você terá o quadrimestre todo para entregar o seu projeto final, em duas etapas. Logo é esperado que o seu projeto reflita um esforço de desenvolvimento compatível com o prazo disponível.
Como exemplo, em oferecimentos anteriores da disciplina tivemos alunos que implementaram jogos (inclusive dois deles que implementaram um clone completo do Pac-Man), algoritmos de IA e aprendizado de máquina e avaliações de desempenho, paralelizações de algoritmos clássicos, ferramentas completas para sincronização de arquivos, clientes de e-mail, servidores de banco de dados com suporte para SQL,…
Caso esteja com dúvidas se a sua ideia é o suficiente para um projeto final que será bem avaliado converse com o professor o quanto antes!
E, caso esteja sem ideias, veja a seguinte proposta de Projeto e os projetos de exemplo feitos pelos alunos nos oferecimentos anteriores.
Haskeroid - Por Artur Henrique Allen Santos
Pac-Man - Por Edson Gomes Martinelli e Rafael Akio Shishito Matos
Pac-Man: Get the Curry - Por Jair Edipo Jerônimo e Michelle Kaori Hamada
Tetris I - Por Bárbara Dias de Sena
Tetris II - Por Fabio Luis Arruda Fernandes
Xadrez - Por Eduardo Castilho Ferreira
A disciplina será completamente presencial. Contudo, o material da disciplina mantém uma boa interseção com os oferecimentos anteriores da disciplina que foram online. Os vídeos e material escrito destas aulas está disponível online no seguinte endereço:
http://haskell.pesquisa.ufabc.edu.br/haskell
A playlist com todos os vídeos das aulas teóricas do curso pode ser encontrada aqui:
https://www.youtube.com/playlist?list=PLYItvall0TqJ25sVTLcMhxsE0Hci58mpQ
Para facilitar, na tabela abaixo você encontra os assuntos juntamente com links diretos para o conteúdo e vídeos.
Exercícios complementares:
Em oferecimentos anteriores da disciplina, ainda haviam aulas práticas. O material dessas podem ser vistoss abaixo. Vasculhe o site em busca dos oferecimentos anteriores da disciplina em busca dos vídeos sobre sua resolução! ;)
As notas podem ser vistas aqui.
Honestidade Acadêmica
Entre outros, o código de ética da UFABC estabelece em seu artigo 25 que é eticamente inaceitável que os discentes:
I - fraudem avaliações;
II - fabriquem ou falsifiquem dados;
III - plagiem ou não creditem devidamente autoria;
IV - aceitem autoria de material academico sem participação na produção;
V - vendam ou cedam autoria de material acadêmico próprio a pessoas que não participaram da produção.Muitos ainda têm dúvidas sobre a interpretação das regras definidas pelo Código de Ética da UFABC. Por esta razão, diversos professores elaboraram um documento (disponível aqui) com vários exemplos e esclarecendo a interpretação das regras acima. Abaixo uma versão resumida. Sempre consulte o documento completo ou converse com o seu professor em caso de dúvidas!
Regra 1 - Você não pode enviar para avaliação um trabalho que não seja de sua própria autoria ou que seja derivado/baseado em soluções elaboradas por outros.
Regra 2 - Você não pode compartilhar a sua solução com outros alunos nem pedir aos seus colegas que compartilhem as soluções deles com você.
Regra 3 - Nos trabalhos enviados para avaliação você deve indicar eventuais assistências que você tenha recebido.
ATENÇÃO: todos os trabalhos enviados para avaliação poderão ser verificados por um sistema automatizado de detecção de plágio.
Qualquer violação às regras descritas acima implicará:
- Descarte dos conceitos atribuídos a TODAS as tarefas avaliativas regulares de TODOS os envolvidos, causando assim suas reprovações automáticas com conceito F .
- Possível denúncia à Comissão de Transgressões Disciplinares Discentes da Graduação, a qual decidirá sobre a punição adequada à violação que pode resultar em advertência, suspensão ou desligamento , de acordo com os artigos 78-82 do Regimento Geral da UFABC.
- Possível denúncia apresentada à Comissão de Ética da UFABC, de acordo com o artigo 25 do Código de Ética da UFABC.
Regulamentações relevantes:
- Código de Ética da UFABC
- Resolução ConsUni nº 63 - Regimento Geral da UFABC
A resolução CONSEPE nº 139 estabelece no seu Artigo 2º, § 4 que nas disciplinas presenciais, a frequência mínima obrigatória para aprovação é de 75% das aulas ministradas e/ou atividades realizadas. Alunos que não atingirem a frequência mínima receberão conceito O.
Abonos de faltas: Conforme descrito no portal do MEC, na educação superior não há abono de faltas . Há, contudo, casos especiais para alunos reservistas , alunos com representação na CONAES, gestantes e em dias de guarda religiosa.
Substituição de faltas por exercícios domiciliares: As situações em que a falta às aulas podem ser preenchidas por exercícios domiciliares são regulamentadas pelo Decreto-Lei nº 1.044, de 21 de outubro de 1969, e estendidos pela Lei nº 6.202, de 17 de abril de 1975. Nestes casos os alunos devem protocolar requerimento diretamente junto à Central de Atendimento ao Estudante da Pró-reitoria de Graduação da UFABC. A Resolução nº 25/2020 da CG dispõe o procedimento a ser seguido para o Regime de Exercícios Domiciliares na UFABC.
Mecanismos de avaliação substitutivos:
Regulamentações Relevantes:
A avaliação da disciplina será composta pelas seguintes notas:
A \(M_Q\) será calculada como a média aritmética entre as notas dos quizzes 1 a 6 (\(Q_1\), \(Q_2\), \(Q_3\), \(Q_4\), \(Q_5\), \(Q_6\)) conforme a fórmula abaixo:
\begin{equation*} M_Q = \frac{Q_1 + Q_2 + Q_3 + Q_4 + Q_5 + Q_6}{6} \end{equation*}
Os quizzes substitutivos substituem algum quiz que tenha sido perdido (com justificativa).
A \(M_{EP}\) é a média ponderada dos dos exercícios programas (\(EP_1\) e \(EP_2\)) com pesos 2 e 3 respectivamente, conforme a fórmula abaixo:
\begin{equation*} M_{EP} = \frac{2 EP_1 + 3 EP_2}{5} \end{equation*}
A nota final (\(N_F\)) será determinada pela média harmônica ponderada de \(M_Q\) e \(M_{EP}\) com pesos 2 e 3 respectivamente, conforme a fórmula abaixo:
\begin{equation*} N_F = \frac{5}{\frac{2}{\max\{0.1, M_Q\}} + \frac{3}{\max\{0.1, M_{EP}\}}} \end{equation*}
O conceito final (\(C_F\)) será obtido de acordo com a equação abaixo:
\begin{equation*} C_F = \begin{cases} \textbf{F} ,& \text{se } N_F \in [0,0;5,0) \\ \textbf{D} ,& \text{se } N_F \in [5,0;6,0) \\ \textbf{C} ,& \text{se } N_F \in [6,0;7,0) \\ \textbf{B} ,& \text{se } N_F \in [7,0;8,5) \\ \textbf{A} ,& \text{se } N_F \in [8,5;10,0] \end{cases} \end{equation*}
Caso seja verificado ocorrência de plágio nos EPs ou nos quizzes, o aluno será automaticamente reprovado com F.
Recuperação
A resolução ConsEPE nº 182 assegura a todos os alunos de graduação com \(C_F\) igual a D ou F o direito a fazer uso de mecanismos de recuperação.
A recuperação será feita através de uma nova avaliação escrita a ser marcada durante o Q3. A sua nota será utilizada para compor a o conceito pós-recuperação \(C_R\) conforme as equações abaixo:
\[N_R = \frac{P_R + N_F}{2}\]
Caso 1 \(C_F = D\):
\begin{equation*} C_R = \begin{cases} \textbf{C} ,& \text{se } N_R \geq 6,0 \\ \textbf{D} ,& \text{caso contrário} \end{cases} \end{equation*}
Caso 2 \(C_F = F\):
\begin{equation*} C_R = \begin{cases} \textbf{D} ,& \text{se } N_R \geq 5,0 \\ \textbf{F} ,& \text{caso contrário} \end{cases} \end{equation*}
Regulamentações Relevantes
Os principal texto utilizado neste curso será o GH Segunda Edição.
[GH]
A primeira edição, que tem boa parte do conteúdo da segunda edição, está disponível na biblioteca:
1st Edition (antiga)
[SGS]
[ML]
[HIPF]
[SM]