--Segunda Prova de LP2 - Segunda Chamada - 2/2000 - 21/12/2000 --============================================================ {- 1) Prove a seguinte propriedade: b) (2.0) map f (xs ++ ys) = map f xs ++ map f ys 2) (2.0) O que sao, para que servem e quais as vantagens de se usar tipos algebricos ao inves dos tipos predefinidos da lingaugem Haskell ao desenvolver programas? 3) (6.0) Dado o tipo de dados de produtos (de um supermercado) abaixo, podemos ter produtos simples, com seu codigo e preco, e produtos compostos (cesta de natal) que possuem seu codigo mas sao na realidade uma lista de produtos. Suponha que no seu controle de estoque um supermercado controla seus produtos nesse formato, juntamente com a quantidade em estoque daquele item. Implemente funcoes para: a) gerar um resumo do estoque (quantidade total) de cada produto simples no estoque do supermercado, em unidades. Note que um mesmo produto simples pode aparecer em produtos compostos. totalEmEstoque :: Estoque -> Estoque b) dada uma lista com os codigos dos itens e suas respectivas quantidades, que deverao compor uma cesta de produtos e o estoque do supermercado, indique se sera' possivel produzir alguma dessas cestas (baseadas apenas nos produtos disponiveis diretamente no estoque, sem contar os que ja' estao em outros produtos compostos). numeroDeCestasPossiveis :: [(Code,Quantity)] -> Estoque -> Bool c) dada uma lista com os codigos dos itens e suas respectivas quantidades, que deverao compor uma cesta de produtos e o estoque do supermercado, indique quantas cestas podem ser produzidas (baseadas apenas nos produtos disponiveis diretamente no estoque, sem contar os que ja' estao em outros produtos compostos). numeroDeCestasPossiveis :: [(Code,Quantity)] -> Estoque -> Int -} type Code = Int type Quantity = Int type Name = String data Product = Simple Code Name | Composite Code Name [(Code,Quantity)] type Estoque = [(Product,Quantity)] exemploEstoque :: Estoque exemploEstoque = [(Simple 009 "Vinho A", 10), (Simple 005 "Doce C", 12), (Composite 004 "Cesta de Natal 1" [(009,10),(005,20),(008,20)],25), (Composite 014 "Cesta de Natal 2" [(009,5),(005,10)],30), (Simple 008 "Queijo Q", 33) ]