Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Polimor'ismo, Classes e Instâncias Renata Carvalho UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Funções Polimór'icas (==) :: t -‐> t -‐> Bool (<) :: t -‐> t -‐> Bool show :: t -‐> String Funcionam para qualquer Npo de dado? Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Funções Monomór'icas • Definição funciona apenas para um Npo de dados específico capitalize :: Char -‐> Char capitalize ch = chr (ord ch + offset) where offset = ord ‘A’ – ord ‘a’ Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Polimor'ismo • Função possui um Npo genérico • Reuso de código • Uso de variáveis de Npos • Polimorfismo Paramétrico (como generics de Java) • Quando os Npos dos elementos não importam zip :: [t] -‐> [u] -‐> [(t, u)] zip (a:as) (b:bs) = (a,b) : zip as bs Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Polimor'ismo length [] = 0 length (a:as) = 1 + length as rev [] = [] rev (a:as) = rev as ++ [a] Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Polimor'ismo rep 0 ch = [] rep n ch = ch : rep (n-‐1) ch • GHCI: inferência de Npos :type rep Int -‐> a -‐> [a] Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Overloading • A função pode ser usada para vários (alguns) Npos de dados • Mesmo nome de função, mas definições disNntas para cada Npo • Polimorfismo de Sobrecarga Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Overloading • Classe: coleção de Npos para os quais uma função está definida • O conjunto de Npos para os quais (==) está definida é a classe igualdade, Eq Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Classes • Usadas para permiNr sobrecarga (overloading) de nomes • Operação de igualdade == • Diferentes significados para diferentes Npos • Exemplos: • Eq • Ord • Show Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Instâncias • Tipos membros de uma classe • São instâncias de Eq • Int, Float, Char, Bool, [Int], (Int, Bool), [[Char]], [(Int, [Bool])] • (Int -‐> Int) não é • Instâncias são TIPOS, não valores Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Funções que usam igualdade allEqual :: Eq t => t -‐> t -‐> t -‐> Bool allEqual n m p = (n == m) && (m == p) • Contexto • Definido pela parte antes do operador => member :: Eq t => [t] -‐> t -‐> Bool member [] b = False member (a:as) b = (a == b) || member as b Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Classes Prede'inidas show :: Show t => t -‐> String read :: Read t => String -‐> t (+) :: Num a => a -‐> a -‐> a (>) :: Ord a => a -‐> a -‐> Bool Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercício • Crie uma função que recebe uma lista de listas de valores de um Npo t que podem ser comparados para saber se são iguais e devolve uma lista de pares (t, Int) onde o primeiro elemento é um valor do Npo t que existe em pelo menos umas das sub-‐ listas da entrada e o segundo é o número de ocorrências desse valor nas sub-‐listas: > agrupar [“Renata”, “Carvalho”] > [(‘R’, 1), (‘e’, 1), (‘n’, 1), (‘a’, 4), (‘t’, 1), (‘C’, 1), (‘r’, 1), (‘v’, 1), (‘l’, 1), (‘h’, 1), (‘o’, 1)] > agrupar [[4,2,4,3,4,4,4,5,4,6], [1,2,3,4,5], [2]] > agrupar [(4, 7), (2, 3), (3, 2), (5, 2), (6, 1), (1, 1)] Funções Polimórficas Funções Monomórficas Polimorfismo Overloading Classes Instâncias Funções que usam igualdade Classes Predefinidas Exercício
Compartilhar