...collaborate on

Em principio quando é que sairão as notas da primeira chamada?

Seria possivel disponibilizarem na página o exame da primeira chamada? Seria bastante util para quem o vai fazer na segunda chamada.

Não, o exame será publicado apenas no fim da época de exames.

-- JorgeSousaPinto - 19 Jan 2005

Haverão mais sessoes de duvidas, nomeadamente mais perto do exame da segunda chamada? É que, visto ainda faltar muito tempo pra este, ainda nao comecamos a estudar para ele, logo nao temos muitas duvidas aínda...

É uma boa pergunta, axo que era mais vantajoso uma das sessoes de duvidas ser na semana antes do exame da 2ª chamada.

Sim, claro, As desta semana destinam-se a quem vai à primeira chamada.

-- JorgeSousaPinto - 11 Jan 2005

Porque não fomos avaliados ao primeiro trabalho? Qual foi então o seu propósito? Perdermos tempo?

Temos diversas disciplinas com vários trabalhos cada. Agora, perdermos tempo com um, que não serviu-nos de nada... é no mínimo absurdo

O primeiro trabalho foi avaliado indirectamente. Uma vez que se tratou de um trabalho preparatório para o terceiro trabalho, entendemos avaliá-lo apenas como cumprindo ou não a funcionalidade básica; esta informação será tida em conta no cálculo da nota final.

-- JorgeSousaPinto - 06 Jan 2005

Absurda é a pergunta. Se no exame não aparecer nenhuma pergunta sobre a propriedade universal do produto, aprendê-la foi uma perda de tempo? Se a sua resposta é afirmativa então devia reconsiderar a sua opção de se inscrever num curso superior.

-- JoseBarros - 11 Jan 2005


No ponto 3.3, devemos fazer operaçoes n-árias ou dar uma aridade a cada operação? por exemplo a soma continuará a ser binária ou será n-ária?

Como não é especificado no enunciado quais os operadores n-ários a utilizar, devem apresentar uma solução genérica válida para operadores arbitrários, e exemplificá-la com alguns operadores de aridades diferentes (ver também enunciado do 1o. TP). Claro que podem incluir para este fim também operadores binários, bem como generalizar um operador binário para ternário, por exemplo.

-- JorgeSousaPinto - 11 Dec 2004


Na valorização 3 pede para fazer parser do tipo Expressao? Mas este nao da pra instanciar pk ta defenido a custa de type e nao data consequentemente da erro. Podemos redefenir atraves do data?

Nas valorizações, "the sky is the limit". Desde que seja em benefício do vosso trabalho sem introduzir novas limitações, alterem o que for necessário.

-- JorgeSousaPinto - 11 Dec 2004


Podiam dar um exemplo de um catamorfismo de ordem superior, é que não estou a perceber a ecencia da questao.

Aqui vai, para quem teve o azar de não estar presente nas muitas aulas em que isto foi exemplificado. A função de inversão de listas com acumulador,

rev [] y = y
rev (x:xs) y = rev xs (x:y)

pode ser escrita como

foldr aux id
where aux h r = \y -> r(h:y)

-- JorgeSousaPinto - 11 Dec 2004


Na verdade o tipo Tree é muito traiçoeiro pois tnato podemos ter árvores: Node 1 [Node 2[Node 3[]]] como tambem podemos ter Node 1 [Node 2 [], Node 3 []]. Qual a versão correcta?

Ambos os exemplos são expressões (diferentes) do tipo Tree Int.

-- JorgeSousaPinto - 11 Dec 2004


Um Tree é por exemplo: Node 1[Node 2[Node 3[Node 4 []]]] Como fazemos uma travessia preorder disso? Nao vejo Node k [a1, a2, a3] como foi respondido numa das pergundas desta faq

O resultado da travessia pré-order desta árvore é a lista [1,2,3,4]: o conteúdo da raíz da árvore seguido (da concatenação) das travessias das sub-árvores, tal como explicado em baixo.


Na 1 da valorização qd criamos a função stExecPN é suposto dar o resultado logo tipo o função aplicada ao prog dado como exemplo no enunciado de PN deve dar logo [15]?

Como é normal neste tipo de funções com estado, haverá uma função de topo que invoca a função monádica inicializando o estado com o valor inicial. A função de topo não calcula um valor monádico, apenas a outra o faz.

-- JorgeSousaPinto - 11 Dec 2004


É necessario fazer relatorio? não é dito nada no enunciado.Se sim, é para submeter tambem? ou é para levar apenas na apresentação?

Tal como no trabalho anterior,

"é necessário a elaboração de um relatório sucinto acerca do trabalho desenvolvido. Este relatório não deve ser submetido ao sistema de submissão dos trabalhos, mas sim entregue em papel na apresentação oral do trabalho."

-- JorgeSousaPinto - 11 Dec 2004


Na 3.3 pede para fazer com os tipos dados o que se fez na 3.1 e na 3.2 mas o ponto 3.2.3 é a mesma coisa pois o tipo de prog é o mesmo em ambos os casos. Estarei enganado?

O tipo é de facto o mesmo, mas os operadores são diferentes. Por exemplo, um operador ternário necessitará de extraír 3 argumentos da stack. Sendo assim, as funções de execução serão generalizações das funções definidas para o caso binário.

-- JorgeSousaPinto - 11 Dec 2004


Referente à valorização 1

para executar programas em PN ou em RPN como catamorfismos temos de distinguir duas associações diferentes, devido à diferente construção do pograma (PN/RPN). esta distinção é marcada pela utilização de foldr/foldl para cada caso.

Correcto. Mas: não se deve utilizar foldl mas sim foldr também para o segundo caso, um catamorfismo de ordem superior.

implementando estas funçoes com monads ST como respondido em baixo será usada a função sequence_ que faz uma dada associação das monads. esta associação funciona correctamente para um caso e como é obvio n funciona para o outro.

existe alguma função que faça o ke faz a sequence_ mas associe de forma inversa as monads?

Há que investigar! Será difícil, caso esta função não exista, escrevê-la?

-- JorgeSousaPinto - 11 Dec 2004


No ponto 3.2.3 b) é suposto fazer a função execRPNt em total point free? E o que devemos entender por um catamorfismo de ordem superior. Também penso que existe uma gralha no enunciado onde diz: "definindo execRPN :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."

Em todo o trabalho devem tentar definir funções o mais point free possivel. O catamorfismo a definir é de ordem superior, pois o seu gene tem de consumir um a parâmetro extra, i.e. o acumulador ([Int]) que simula a stack. Existe realmente uma gralha em

"definindo execRPN :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."

devendo ler-se

"definindo execRPNt :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."

-- NunoRodrigues - 09 Dec 2004

Na valorização 1 é pedido para utilizar a monad ST para executar um programa. Será suficiente ter um monad ST cujo estado é um [Instr] e cuja unica computaçao será executar execPN ou execRPN sobre o seu estado e devolver o resultado da computação??

Não. O estado deverá ser um tipo de dados que simule uma stack (p.e. [Int]). Pretende-se que façam a conversão de uma instânica de Instr para uma instância de Monad ST, que simule correctamente a operação em causa. No final desta operação irão obter uma lista de monad ST. Ai podem aplicar sequence a essa lista e executar correctamente a monad resultante.

-- NunoRodrigues - 09 Dec 2004

No ponto 2 das valorizações é necessário mostrar o estado interno da stack, que so é criado quando se faz catamorfismo de execução. Para conseguir mostrar a stack interna é necessário monades como genes do catamorfismo??

-- TWikiGuest - 09 Dec 2004

Não. Para irem mostrando o conteúdo da stack á medida que vão executando um programa, têm de trabalhar com a monad STIO. Posto isto, devem fazer a tradução de instruções (Instr) para monades STIO, monades estas que já podem efectuar IO mostrando assim o resultado interno da stack ao longo da execução do programa.

-- NunoRodrigues - 09 Dec 2004

Como posso ligar a opcao de trace de um calculo no ghc?

Podiam dar um exemplo de uma FTree com uma operação. Não é uma FBtree só com um lado, tipo uma lista, com o operador no fim???

é isto k pedem como FBTree : ftree = (FNode 1 [FNode 3 [FNode 4 [FNode 5 [FLeaf 2]]]])

Tree : tree = (Node 1 [Node 3 [Node 2 [Node 4 [Node 5[]]]]]), é isto?

Representação da expressão envolvendo um operador ternário g e um operador binário f

g(2,3,f(10,20))

FNode g [Leaf 2, Leaf 3, FNode f [Leaf 10, Leaf 20]]

-- JorgeSousaPinto - 08 Dec 2004


Tive o mesmo problema na pergunta 3.3, nao faz muito sentido pedir um preorder e um postorder de uma RTree, ou faz ?

Sim, faz, cfr. resposta à questão seguinte. Não faria sentido, isso sim, falar de uma travessia inorder de uma destas árvores.

-- JorgeSousaPinto - 08 Dec 2004


Na questão 3.3 que pede para fazer o preorder e o postorder é para o fazer do tipo Tree.?

Podiam dar o exemplo do resultado, dada uma Tree, de fazer preorder e postorder.

Sim. Por exemplo, para a árvore Node k [a1,a2,a3] (com a1, a2, a3 do tipo Tree), o resultado será uma lista com k à cabeça, seguida, por esta ordem, dos elementos resultantes das travessias de a1, a2, e a3. Na travessia pós-ordem a diferença é que k aparece no fim da lista.

-- Main.Jorg

r112 - 12 Feb 2007 - 19:48:41 - JoseBacelarAlmeida
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback
Syndicate this site RSSATOM