-- Primeira Prova de LP2 -- 10/12/98 ------------------------------------ 1 - (2.0) Compreensoes de listas sao um excelente mecanismo para definir listas a partir de outras listas. Usando compreensao de listas, defina as seguintes funcoes: map :: (a->b) -> [a] -> [b] filter :: (a -> Bool) -> [a] -> [a] mcs :: Int -> Int -> [Int] -- multiplos comuns de dois numeros (ate' no maximo x * y) dcs :: Int -> Int -> [Int] -- divisores comuns de dois numeros 2 - Algumas calculadoras, para evitar o uso de parenteses, trabalham com uma notacao matematica onde as operacoes aparecem apos os operandos, por exemplo: "3 4 +" --> "3 + 4" --> 7 "3 4 + 11 1 - *" --> "(3 + 4) * (11 - 1)" --> 70 "3 4 11 1 - * *" --> "3 * (4 * (11 - 1))" --> 120 "3 4 11 1 - 5 * * +" --> "3 + (4 * ((11 - 1) * 5))" --> 203 faca funcoes para: (1.0) separar uma String em Strings apenas com numeros ou operacoes: separa :: String -> [String] separa "3 4 11 1 - * *" = ["3","4","11","1","-","*","*"] (0.5) contar o numero de operacoes em uma String nesta notacao ops :: String -> Int ops "3 4 11 1 - * *" = 3 (1.0) contar o numero de operandos em uma String nesta notacao operandos :: String -> Int operandos "3 4 11 1 - * *" = 4 (1.0) converter um operando em seu respectivo inteiro: stoi :: String -> Int stoi "225" = 225 (1.0) qual o tipo da seguinte funcao: stoop "*" = (*) stoop "+" = (+) stoop "-" = (-) (2.0) avaliar uma expressao nesta notacao evalR :: String -> Int evalR "3 4 + 11 1 - *" = 70 (2.0) mostrar uma expressao nesta notacao com parenteses showParen :: String -> String showParen "3 4 + 11 1 - *" = "(3 + 4) * (11 - 1)"