Você está na página 1de 12

Tipos Produto

• São usados para representar grupos coesos de dados. Os nomes atribuidos


as estes tipos variam consoante as linguagens:
• Pascal: record
• C : struct
• Java, C++ : class

• Exemplo de literal do tipo produto em Caml Light:


• ("Carlos", 1965, "Beira")
• Tipo: string * int * string
Tipos Produto
• Para que os campos de um tipo produto possam ser alterados, têm que ser
definidos com o prefixo mutable.
• A definição ficaria então:
• type pessoa = { Nome:string; mutable Idade:int; mutable Cidade:string; mutable Altura:float
• Desta forma temos que
• pedro.idade <- pedro.idade + 1;; Válido
• pedro.nome <- "Joåo“Inválido
Tipos Produto
• Por omissão, os tipos produto são imutáveis.
• Se fizermos: let pedro = {Cidade="Maputo"; Idade=25; Altura=l .76; ;;
• e depois
• pedro.idade<-pedro.idade+1;;

• temos o erro
• The label Idade is not mutable.
Tipos Produto
• Os elementos de um tipo produto podem ser processados de duas formas:
• Emparelhamento de padrões
• let GetName = fun { Nome=x } x

• Operarão de acesso “.”


• momento.hora ;;
• pedro.Cidade ;;
Tipos Produto Etiquetados
• Em Caml Light é também possivel afixar etiquetas aos campos de tipo
produto.

• Eis dois exemplos


• type pessoa = { Nome:string; Idade:int; Cidade:string; Altura:float } ;;
• let pedro = {Cidade="Maputo"; Idade=25; Altura=1.76; ;;

• type tempo = { hora:int ; minuto:int } ;;


• let momento = { hora=17 ; minuto=30 } ;;
Exercícios
• Criar Tipo Pessoa Com os seguintes atributos alteráveis
• Nome: string
• Bi: int
• Ano de Nascimento: int
• Altura: float

• Criar um tipo para representar todos dados do BI


Tipos Soma
• São usados para representar tipos cujos valores podem assumir diferentes formas.
• Os nomes atribuídos as estes tipos variam consoante as linguagens:
• Pascal: record + variant
• C : union
• Java, C++ : construidos através de abstract class + subclasses.

• Exemplo de tipo soma em Caml Light :


• type ident=
• nome of string
• I bi of int ;;

• let a=nome “Mohammad”;;


• let b=bi 10000;;
Tipos Soma
• Mais exemplos de tipos soma em Caml Light:
• type naipe =
• Copas
• I Paus
• I Espadas
• I Ouros ;;

• let a=Copas;;

• type expr =
• num of int
• I soma of expr * expr
• I sub of expr * expr
• I mul of expr * expr I div of expr * expr;;

• 3+7*2 = soma( num(3), mul(num(7), num(2)) )


Tipos Soma : Listas
• Pode também definir-se um tipo alternativo para listas:

• type 'a lista =


• Nil
• I Node of 'a * 'a lista ;;

• [] Nil
• [1]Node(1,Nil)
• [1;2] Node( 1 , Node( 2 , Nil ) )

• let rec Len2 = fun


• Nil ->0
• I (Node(h,t)) -> 1 + (Len2 t);;
Tipos Soma : Árvores binárias (Árvore com no máximo 2
Ramificações)
• A definição de árvores binárias faz-se da seguinte forma: type 'a Tree =
• Nil
Segundo
Primeiro
• I Node of ‘a * 'a Tree * ’a Tree;;
Ramo
Ramo

Primeiro
Elemento

• Node(1, Node(2, Nil, Nil), Node(3, Nil, Nil) )


Exercícios
• Representar as seguintes árvores
1 1

7 2
2 3

4 5 7
5

• Função para calcular tamanho de uma árvore


Exercícios de Revisão
• Crie uma função para identificar se um triângulo é equilátero, isósceles ou
escaleno
• Crie uma função para simular o tempo de permanência numa sala de jogos.
Para tal será necessário ter os seguintes dados: Hora e Minuto de entrada e
Hora e Minuto de saída. A Tabela de é a seguinte:
• 1ª Hora- 500
• 2ª Hora- 575
• 3ª Hora- 650
• Horas seguintes- 700
• As horas acumulam. Os tempos de permanência são arredondados para
horas completas e sempre para cima

Você também pode gostar