--Segunda Prova de LP2 - 1/2001 - 21/06/2001 --========================================== 1) (2.0) Prove a seguinte propriedade: length (map f xs) = length xs 2) (2.0) Qual a diferenca entre avaliacao estrita e avaliacao preguicosa (lazy)? De exemplos. Qual a vantagem da avaliacao lazy? 3) (2.0) O que sao tipos abstratos de dados? Qual a sua utilidade? Como e' especificado um tipo abstrato de dados? De exemplo, e mostre uma implementacao. 4) O tipo de dados abaixo define uma arvore de expressoes aritmeticas, com suporte a valores e variaveis. data Exp = Valor Int | Var Char | Add Exp Exp | Sub Exp Exp | Mul Exp Exp | Div Exp Exp defina funcoes para: - (1.0) avaliar um expressao aritmetica, contendo apenas valores e operacoes. eval :: Exp -> Int - (1.5) simplificar expressoes aritmeticas, efetuando operacoes sempre que possivel para reduzir o tamanho da arvore. simpl :: Exp -> Exp - (1.5) converter para String, com os parenteses necessarios, uma expressao aritmetica. showexpr :: Exp -> String