Baixe o app para aproveitar ainda mais
Prévia do material em texto
Tipos Algébricos Renata Carvalho UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos Algébricos • Representar meses: Janeiro, ..., Dezembro • Representar um Hpo cujos elementos podem ser um inteiro ou uma string • Representar o Hpo árvore • Tipos sinônimos não podem ser recursivos Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos Enumerados • Criar novos Hpos de dados e novos construtores de Hpos: data Bool = True | False data Estacao = Primavera | Verao | Outono | Inverno data Tempo = Frio | Quente Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos Enumerados • Funções usam casamento de padrões clima :: Estacao -‐> Tempo clima Inverno = Frio clima _ = Quente • Relembrando: casamento de padrões uHliza construtores de dados (listas, tuplas, etc) Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Produtos type Nome = String type Idade = Int data Pessoas = Pessoa Nome Idade Pessoa “José” 22 Pessoa “Maria” 23 showPessoa :: Pessoas -‐> String showPessoa (Pessoa n i) = n ++ “ -‐-‐ ” ++ show a pessoa :: Nome -‐> Idade -‐> Pessoas Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Por que não usar tuplas? type Pessoas = (Nome, Idade) • Com Hpos algébricos • Cada objeto do Hpo tem um rótulo explícito • Não se pode confundir um Hpo com outro, devido ao construtor (definições fortemente Hpadas) • Tipos recursivos e enumerados • Com Hpos sinônimos • Elementos mais compactos, definições mais curtas • Maior probabilidade de reusar funções polimórficas Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Alternativas • Construtores com argumentos data Forma = Circulo Float | Retangulo Float Float Circulo 4.9 :: Shape Retangulo 4.2 2.0 :: Shape eRedondo :: Shape -‐> Bool eRedondo (Circle _) = True eRedondo (Retangulo _ _) = False Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercício • Definir a função abaixo: area :: Shape -‐> Int Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Forma Geral data Nome_do_Tipo = Construtor1 t11 ... t1k1 | Construtor2 t21 ... t2k2 ... | Construtorn tn1 ... tnkn • O Hpo pode ser recursivo • A definição pode ser polimórfica, adicionando argumentos ao Nome_do_Tipo Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos Recursivos • Tipos de dados recursivos data Expr = Lit Int | Add Expr Expr | Sub Expr Expr • Funções definidas recursivamente eval :: Expr -‐> Int eval (Lit n) = n eval (Add e1 e2) = (eval e1) + (eval e2) eval (Sub e1 e2) = (eval e1) – (eval e2) Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos PolimórAicos • Tipos de dados polimórficos data Pares t = Par t t Par 6 8 :: Pares Par True True :: Pares Par [] [1,3] :: Pares • Listas data Lista t = Nil | Cons t (List t) • Árvores data Arvore t = NilT | Node t (Arvore t) (Arvore t) Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercícios • Defina as seguintes funções: showExpr :: Expr -‐> String toList :: List t -‐> [t] fromList :: [t] -‐> List t depth :: Arvore t -‐> Int colapse ::Arvore t -‐> [t] Tipos Algébricos Tipos Enumerados Produtos Por que não usar tuplas? AlternaHvas Exercício Forma Geral Tipos Recursivos Tipos Polimórficos Exercícios
Compartilhar