Cálculo de Programas

Mestrado Integrado em Engenharia Informática e Ciências da Computação

Tópicos

Avisos

28 Ago - Época especial: as classificações estão afixadas em Avaliação / alunos.

23-Jul - Publicada em Avaliação / alunos a correcção do exame de recurso (PDF)

17-Jul - Época especial: o exame terá lugar no dia / horas 25-Jul-2017 / 09h-11h, na sala CP2-204.

10 Jul - Esclarecimentos sobre nota do recurso - encontra-se assinalado no sumários o período em que o docente responsável pela disciplina está disponível para dar esclarecimentos sobre a nota do recurso.

10 Jul - Notas finais propostas: estão afixadas em Avaliação / alunos.

10 Jul - Notas do exame de recurso: estão afixadas em Avaliação / alunos.

8 Jul - Notas do exame de recurso (actualização): deverão ser afixadas durante a manhã de segunda feira em Avaliação / alunos.

29 Jun - Publicados em Avaliação / alunos os nomes dos alunos admitidos ao exame de recurso.

27 Jun - Esclarecimentos sobre nota do TP - encontram-se assinalados no sumários os períodos em que os docentes estão disponíveis para dar esclarecimentos sobre a nota do TP. Cada aluno /grupo deve procurar o docente que os avaliou.

26 Jun - Acabam de ser afixadas em Avaliação / alunos as notas dos TPs.

24 Jun - Notas dos TPs: deverão ser afixadas em Avaliação / alunos na próxima 2.a-feira dia 26-Jun.

24 Jun - Notas do teste de 1-Jun: estão afixadas, bem como o enunciado com a correcção, em Avaliação / alunos. Serão brevemente anunciadas aqui as datas / horas para alunos que queiram ver o teste.

23 Jun - Notas do teste de 1-Jun: serão amanhã afixadas em Avaliação / alunos.

15 Jun - Orais do TP: recomenda-se aos alunos que não têm fotografia no portal académico que a insiram rapidamente, pois com tantos alunos é impossível à equipa docente lembrar-se de quem são, o que pode vir a prejudicar a sua avaliação.

14 Jun - Orais do TP: terão lugar na sala DI 0.11, ver horário. Para evitar esperas desnecessárias, os alunos só deverão chegar à sala quando se aproximar o seu "slot" de apresentação.

12 Jun - Entrega do TP: está aberta a partir das 12h de hoje a submissão do trabalho no portal http://www.di.uminho.pt/cp até às 23h59m do dia 13-Jun.

03 Jun - Entrega do TP (nova data): até às 23h59m do dia 13-Jun. Oportunamente serão dadas informações sobre o processo de submissão. As orais terão lugar nas tardes dos dias 16-Jun e 19-Jun.

31 Mai - Teste de 1-Jun, 16h, Cantina - informam-se os alunos de que podem trazer consigo, para consulta, o formulário, desde que sem anotações manuscritas; qualquer violação desta regra implica a sua recolha imediata.

20 Mai - Avisa-se que haverá uma aula teórica suplementar para LCC na próxima 4ª feira, dia 24 de Maio, das 16h-18h, no anfiteatro A5 do CP1.

10 Mai - Trabalho prático: relembram-se os alunos que devem consultar regularmente as FAQs que vão aparecendo na secção de Atendimento.

08 Mai - Em cumprimento do Despacho RT-29/2017, avisa-se que não haverá aulas desta disciplina na próxima 6ª feira dia 12 de Maio.

06 Mai - Publicada no Material a ficha nr.12, a preparar para as aulas TP da semana de 08-Mai.

05 Mai - Publicado na Bibliografia mais um capítulo (344K) dos apontamentos.

02 Mai - Trabalho prático: os alunos devem consultar regularmente as FAQs que aparecerem na secção de Atendimento.

01 Mai - Publicada no Material a ficha nr.11, a preparar para as aulas TP da semana de 02-Mai.

28 Abr - Trabalho prático: enunciado e material publicados em Material.

23 Abr - Publicada no Material a ficha nr.10, a preparar para as aulas TP da semana de 24-Abr.

17 Abr - Publicada no Material a ficha nr.9, a preparar para as aulas TP da semana de 18-Abr.

1 Abr - Publicada no Material a ficha nr.8, a preparar para as aulas TP da semana de 3-Abr.

31 Mar - Avisa-se que não haverá aula teórica na próxima 2ª feira dia 3 de Abril (docente em serviço em Lisboa).

31 Mar - Publicadas no Material várias bibliotecas em Haskell de apoio ao estudo de catamorfismos e seu papel na programação.

25 Mar - Publicada no Material a ficha nr.7, a preparar para as aulas TP da semana de 27-Mar.

18 Mar - Publicada no Material a ficha nr.6, a preparar para as aulas TP da semana de 20-Mar.

16 Mar - Os alunos que pretendam usufruir da nota do TP do ano passado (cf. Regime de Avaliação) devem enviar ao responsável pela disciplina uma mensagem até 24-Abril; aqueles que o já tiverem feito não precisam de re-enviar mensagem.

13 Mar - Publicado na Bibliografia mais um capítulo (344K) dos apontamentos.

11 Mar - Publicada no Material a ficha nr.5, a preparar para as aulas TP da semana de 13-Mar.

04 Mar - Publicada no Material a ficha nr.4, a preparar para as aulas TP da semana de 6-Mar.

25 Fev - Publicada no Material a ficha nr.3, a preparar para as aulas TP da semana de 27-Fev.

25 Fev - Não haverá aulas na terça-feira, dia 28, devido à tolerância de ponto (Despacho RT-14/2017)

18 Fev - Publicada no Material a ficha nr.2, a preparar para as aulas TP da semana de 20-Fev.

14 Fev - Mudança de sala: a partir de 17-Fev (inclusive) a aula teórica de LCC passa para o anfiteatro A2.

10 Fev - Publicada no Material a ficha nr.1, a estudar para as aulas TP da semana de 13-Fev.

1 Fev - Início das aulas: 6 de Fevereiro. Na primeira semana só haverá aulas teóricas.

1 Fev - Criada esta página de avisos.

Horário de Atendimento

  • Em qualquer altura: via correio electrónico pressionando aqui. Qualquer outro meio de contacto será considerado informal, não se sentindo a equipa docente vinculada a dar uma resposta em tempo útil.

  • Durante o período de aulas: de acordo com o horário seguinte, sujeito a marcação verbal ou por email, com um mínimo de uma semana de antecedência, junto do respectivo docente:

Dia Hora Cursos Docente
2.ª-feira 19h00-20h00 MiEI J.N. Oliveira
3.ª-feira 11h00-12h00 MiEI/LCC R. Neves
3.ª-feira 11h00-12h00 LCC J.M. Proença
5.ª-feira 10h00-11h00 MiEI H. Pacheco
6.ª-feira 18h00-19h00 LCC J.N. Oliveira
6.ª-feira 19h00-20h00 MiEI J.N. Oliveira

Atendimento electrónico (FAQs) tinynew.gif

Q01 - Ao compilar o trabalho deparámo-nos com o erro

cp1617t.lhs:358:27: Not in scope: ‘nothing’
O que devemos fazer?

R: Essa função pertence a Cp.hs. Devem "refrescar" as bibliotecas que estão no material pedagógico, pois foram evoluindo à medida que a discplina avançou.


Q02 - Não consigo definir funções com o padrão (n+1). O que devo fazer?

R: Há duas soluções: ou adiciona {-# OPTIONS_GHC -XNPlusKPatterns #-} no início do código Haskell em cp1617t.lhs, ou interpreta o ficheiro como essa opção passada como parâmetro,

ghci -XNPlusKPatterns cp1617t.lhs

Q03 - No Problema 2 escreve-se que o "wrapper deverá ser um catamorfismo". O catamorfismo não deveria ser o "worker" e não o "wrapper"?

R: Sim! É uma gralha: nesse texto, onde está "wrapper" deve ler-se "worker" (ver correcção feita sobre o PDF).


Q04 - No Problema 2 é obrigatório usar a lei de recursividade múltipla?

R: Se se recomenda usá-la é porque é a melhor alternativa. Não se esqueçam que têm de apresentar os cálculos justificativos de como chegaram à vossa solução.


Q05 - No Problema 2 é pedido para apresentarmos os cálculos. O que é preciso fazer no LaTeX para reproduzir o "layout" dos raciocínios que aparecem nas fichas e nos apontamentos?

R: Fazem assim: (a) ao ficheiro cp1617t.sty acrescentam, em qualquer sítio, as linhas

\def\start{&&}
\def\just#1#2{\\ &#1& \rule{2em}{0pt} \{ \mbox{\rule[-.7em]{0pt}{1.8em} \small #2 \/} \} \nonumber\\ && }
(b) depois usam o esquema ilustrado a seguir (adaptado da Ficha 5):
\begin{eqnarray*}
\start
        |p? . f|
%
\just={ justificação ..... }
%
        |alpha.(split (p.f) f)|
%
\just={ justificação ..... }
%
        |alpha.(id >< f).(split (p.f) id)|
%
      ---- etc -----
%
\end{eqnarray*}

Q06 - Não percebemos o funcionamento da função 'lsplitB_tree'. Como é que a decisão sobre quantos elementos ficam na raiz, e.g., é tomada? E depois como são inseridos os restantes elementos?

R: A função lsplitB_tree está para B_tree assim como qsep está para BTree (ver BTree.hs). Neste caso, só é possível guardar um valor em cada nó da árvore gerada, enquanto que em B_tree se pode guardar mais do que um. Portanto, em vez de se gerar uma BTree de procura, pode gerar-se uma B_tree de procura, com várias sub-árvores em cada nó e obter um 'quicksort' mais interessante.

Dá-se de seguida um exemplo que pode ajudar: o anamorfismo com gene lsplitB_tree aplicado à lista [7,16,5,6,12,9,21,18] deverá dar a árvore intermédia que a seguir se representa:

_.jpg


Q07 - Há alguma maneira de testarmos se a nossa função 'mirrorB_tree' está bem implementada?

R: Naturalmente que essa função deve ser inversa de si própria. Outra forma de a verificarem é fazerem o seguinte teste, quando o problema estiver acabado. Como sabem,

qSort = cataBTree inord . anaBTree qsep.

no módulo BTree.hs. Se no meio do algoritmo colocarem invBTree a lista de entrada virá ordenada por ordem inversa. Ora invBTree corresponde à vossa mirrorB_tree.

Assim, se ao adaptarem este teste ao vosso quicksort sobre B_tree a lista de entrada não aparecer por ordem inversa, então a vossa mirrorB_tree não está a funcionar bem.


Q08 tinynew.gif - Há alguma convenção uma para os testes quickCheck?

R: O enunciado é omisso quanto a este ponto. No entanto, dá jeito que as funções quickcheck tenham o prefixo prop_XXX (desde que quickCheck prop_XXX tipe correctamente).


Q9 tinynew.gif - Na alínea 4(c) da ficha nº 6, fiz os diagramas de cada catamorfismo e chego às definições das funções com variáveis através da lei universal-cata e consigo perceber que realmente fazem a mesma coisa; mas não sei se era assim que era suposto resolver...

R: Não: isso mostra, mas não prova! O que queremos provar é que f=g, sendo ambas catamorfismos. Logo podemos usar a lei-universal aplicada a f ou g, à nossa escolha, por exemplo

g = ([ i,i ])
<=> { Universal-cata }
g.in = [i, i] . (id + g)
<=> { função constante i, fusão-+ etc, isomorfismo in/out }
g= i .[ id , g] . out
<=> { função constante i }
g = i

Agora basta verificar se i = f, pelo mesmo processo.


Q10 - Na questão nrº 5 da ficha 9, no terceiro passo, eu passei 'out' para o outro lado da igualdade,

(g n).(*n).in = (id + (*n))
Há alguma vantagem nisso?

R: Há! Ora vejamos:

(g n).(*n).in = (id + (*n))

<=> { fusão-+ ; def-+ }

[ (g n) .(*n). zero, (g n) . (*n) . succ ] = [ i1 . id , i2.(*n) ]

<=> { eq-+ ; simplificação (propriedades dos números naturais)}

(g n).zero = i1

(g n) . (+n) . (*n) = i2.(*n)

O que resta é usar a 2ª lei do condicional (mais propriedades dos naturais) para resolver as duas igualdades - façam-no. Não se esqueçam de um detalhe: a função 'bang' ( ! : A -> 1) é a identidade quando A = 1. (Porquê)


Q11 - Pretendemos desenhar diagramas de catamorfismos como aparecem nos apontamentos e nas fichas. O que temos de fazer?

R: A package LaTeX para fazerem isso carrega-se adicionando

\usepackage[all]{xy}
ao preâmbulo. Há um extenso manual sobre esta package fácil de encontrar. Fica disponível a função \xymatrix que é usada a seguir para desenhar um dos diagramas da ficha 6:
\xymatrix@@C=2cm{
    |Nat|
           \ar[d]_-{|cata g|}
&
    |1 + Nat0|
           \ar[d]^{|id + (cata g)|}
           \ar[l]_-{|inNat|}
\\
     |B|
&
     |1 + B|
           \ar[l]^-{|g|}
}
Agora é só adaptar ao caso concreto que querem desenhar.

Q12 - Qual é o formato em que apenas uma chaveta abrange duas equações, para colocar por exemplo o passo de passagem da lei de recursividade múltipla?

R: Acrescentem ao preâmbulo as linhas

%format (lcbr (x)(y)) = "\begin{lcbr}" x "\\" y "\end{lcbr}"
\newenvironment{lcbr}{\left\{\begin{array}{l}}{\end{array}\right.}
Exemplo: |lcbr (id= g.f)(f.g=id)| na ficha 4.

Q13 - A utilização da função succ sem a aplicar a nenhuma variável resulta, em alguns contextos, num erro de geração do PDF.

R: Isso deve-se ao facto de \succ no ficheiro auxiliar cp1617t.sty (linha 58) estar definido com um parâmetro. Sugere-se a re-definição (local)

%format succ = "\mathsf{succ}"

Q14 tinynew.gif - Ao escrever as justificações tenho erros em, por exemplo, \just<=>{ texto }. Qual é o problema?

R: Isso deve-se a <=> ser código Haskell e não código LaTeX. Resolve-se o erro escrevendo \just{|<=>|}{ texto }.


Q15 tinynew.gif - Em relação à FAQ 12, funciona mas diz que o ambiente já está definido...

R: Têm razão - a linha

\newenvironment{lcbr}{\left\{\begin{array}{l}}{\end{array}\right.}
já existe em cp1617t.sty; logo não faz falta.


Q16 tinynew.gif - Nas justificações do problema 2 temos expressões muito grandes que saem fora da página. Como podemos resolver isso?

R: Sugiro que usem algo do género

%format (longcond (c)(t)(e)) =
"\begin{array}{ll}\multicolumn{2}{l}{" c -> "}\\& " t ",\\& " e "\end{array}"
que divide um condicional em três linhas. (O texto acima todo numa linha: está partido em duas para o html não cortar o que não pode mostrar.)


Q17 tinynew.gif - Ao justificarmos a recursividade multipla há 2 equações que, quando nelas introduzimos variáveis, acabamos com 4 equações. O que se sugere na FAQ 12 só dá para duas, como resolver este caso?

R: Sugerem-se dois lcbr dentro de um lcbr (2 * 2 = 4).


r19 - 12 Jun 2017 - 19:26:23 - JoseNunoOliveira
This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. Ideas, requests, problems? Send feedback.
Syndicate this site RSSATOM