Buscar

Aula 4-Tipos Basicos-Definicoes-com audio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação Funcional
(COMP0393)
Leila M. A. Silva
1
Tipos Básicos e Definições
(COMP0393)
Aula 4
2
Programação Funcional
Baseada em expressões e funções (expression oriented);
Funções são definidas como equações;
Avaliação das funções é realizada da mesma forma que na matemática;
Provê elementos para se programar em vários níveis de granularidade:
Funções de alta ordem
Polimorfismo paramétrico
Avaliação preguiçosa
Tipos recursivos (algébricos)
Tipos Abstratos de Dados (TADs)
Type Classes
Módulos
Raciocínio formal com os programas
Prototipação
	
3
Programação Funcional
Por que usar uma linguagem do paradigma funcional?
Código menor, mais claro e mais fácil de manter
Poucos erros, alta confiabilidade.
Menor “gap” semântico entre os programadores e a linguagem. 
Tempo menor de produção.
	
4
Haskell
Criada por Peyton Jones e Hughes em 1998
Baseada no lambda cálculo (teoria matemática de funções)
Denominação em homenagem a Haskell B. Curry, propositor do lambda cálculo.
	
5
Definições
Um programa em Haskell consiste de um conjunto de definições. 
Uma definição associa um nome (ou identificador) a um valor de um tipo particular.
Definições simples seriam:
nome :: tipo
nome = expressão
idade :: Int
idade = 2019-1993
	
6
Definições
Definições de funções também consideram os tipos de entrada e saída da função
dobro :: Int -> Int
dobro x = 2*x
dobro 3 = 2*3
dobro (2+3) = 2*(2+3)
	
7
dobro
Int
Int
argumentos ou
parâmetros
resultado
x
2*x
Definições
Paralelo com a notação da matemática
dobro :: Int -> Int
dobro x = 2*x
dobro : Int -> Int
dobro(x) = 2*x
dobro 3 = 2*3
dobro (2+3) = 2*(2+3)
dobro(3) = 2*3
dobro((2+3)) = 2*(2+3)
	
8
dobro
Int
Int
argumentos ou
parâmetros
resultado
x
2*x
Definições
Declaração e definição de funções de forma geral
 Tipos dos argumentos (entrada)
	nome :: Tipo1 -> Tipo2 -> ...Tipon->Tipor
Nome da função Tipo do resultado
	nome x1 x2 ...xn = e
		argumentos resultado
	
9
Tipos Básicos
O que é um tipo?
Uma coleção de valores aos quais podemos aplicar funções/operações sobre estes valores
Por que linguagens modernas usam tipos?
Programas são mais confiáveis (seguros) pois erros de programação podem ser descobertos mais facilmente
Melhoram a legibilidade
Informação relevante para documentação
Programas mais eficientes
	
10
Tipos Básicos
Em Haskell toda expressão é de algum tipo
Restringe a uso coerente
Permite checagem estática de tipos => detecção precoce de erros
Tipos podem ser explicitados pelo programador
Sistema de inferência de tipos
	
11
Tipos Básicos
Primitivos (ou atômicos)
Valores atômicos
inteiros, caracteres, reais, booleanos, enumerados, ...
Tipos compostos (ou estruturados)
Tuplas, listas, ...
OBS: Nomes de tipos em Haskell iniciam sempre em maiúsculo e nomes de funções em minúsculo.
	
12
Tipos Primitivos
Bool
Valores: True, False
Operações: && (e), || (ou), not (negação), == (igualdade),
/= (desigualdade)
Tipos Booleanos podem ser usados como argumentos ou resultados de funções. Também são o resultado de algumas expressões relacionais que iremos ver adiante.
	
13
Tipos Primitivos
Bool
Ex:
ouExclusivo :: Bool -> Bool -> Bool
ouExclusivo x y = (x || y) && not (x && y)
	
14
||
Bool
Bool
resultado
x
&&
not
&&
y
ouExclusivo
Tipos Primitivos
Int (64 bits)
Literais: 0, 4, -345, 2147483647, maxBound::Int, ...
Operações: +, *, ^, -, <, <=, ==, /=, >=, >
Funções: div, mod, abs, negate, show, read
Integer (ilimitado)
	
15
Tipos Primitivos
Int
Ex:
tresIguais :: Int -> Int -> Int -> Bool
tresIguais x y z = (x == y) && (y == z)
	
16
==
Int
Bool
resultado
x
==
&&
y
tresIguais
z
Tipos Primitivos
Sobrecarga de operadores (overloading)
Algumas operações são permitidas para tipos diferentes utilizando o mesmo símbolo. Por exemplo, ==
Para comparação de inteiros 
	(==) :: Int -> Int -> Bool
Para comparação de Booleanos
	(==) :: Bool -> Bool -> Bool
	
17
Tipos Primitivos
Char
'a', 'b', ‘A‘,'\t', '\n', '\\', '\’’, ‘\’’’ 
Código para codificar caracteres como inteiros – ASCII
Ex: ‘A’ a ‘Z’ : códigos 65 a 90; ‘a’ a ‘z’: códigos 97 a 122
Operações: <, >, ==, /=, <=, >=
Funções de conversão: ord, chr 
Para usar estas funções você precisa incluir no início do seu arquivo import Data.Char pois estas funções não estão no Prelude mas na biblioteca Data.Char
Cuidado!!! Uma variável de nome a, esecreve-se a. A letra a, que é um caracter, escreve-se ‘a’. No exemplo abaixo, c é uma variável e ‘a’ e ‘z’ as letras a e z.
ord :: Char -> Int
chr :: Int -> Char
import Data.Char
ehMinusculo::Char->Bool
ehMinusculo c = ('a' <= c) && (c <= 'z')
	
18
Tipos Primitivos
Float e Double
0.31416, -23.12, 2.45e+2
Operações: +, -, *, /, ^, **, <, <=, ...
Funções: abs, acos, asin, atan, cos, sin, tan, sqrt, exp, log, fromIntegral... 
Cuidado! 5 + 3.6 está OK, retorna 8.6 mas
(floor 5.6) + 3.6 dá erro => fromIntegral (floor 5.6) + 3.6
mediaTres :: Float -> Float -> Float -> Float
mediaTres a b c = (a + b + c)/3
19
Regras de nomeação
Haskell é case sensitive
Nomes de tipos começam com maiúsculas
Int, Integer, Char, ...
Nomes de variáveis e funções, com minúsculas
x, y, div, mod, abs, ...
Palavras reservadas não podem ser usadas: if, then, else, case,...
F :: int → int	-- erro na compilação
F X = X + 1	-- erro na compilação
20
Layout dos scripts: a regra do offside
Scripts são sensíveis à indentação
 dummy x = x*x
 +x
 +2
 cube x = ..
 dummy x = x*x
O primeiro caracter da definição abre uma caixa que contêm a definição
Tudo o que for digitado dentro da caixa faz parte da definição.
A caixa termina quando é encontrado um caracter encima (ou à esquerda) da linha vertical.
Scripts são sensíveis à indentação
 misterio x = x*x
 +x
 +2
 outra x = . . .
 misterio x = x*x
O primeiro caracter da definição abre uma caixa que contêm a definição
Tudo o que for digitado dentro da caixa faz parte da definição.
A caixa termina quando é encontrado um caracter em cima (ou à esquerda) da linha vertical.
21
A regra do offside
soma x = x+
x
Error ...: Syntax error in expression (unexpected ‘;’)
O ‘;’ marca o fim de uma definição. Assim, várias definições poderiam ser escritas numa só linha, por exemplo
Em definições bem indentadas, seguindo a regra do offside, o ‘;’ é implícito.
soma :: Int->Int; soma x = x+ x; prod y = y*y
22
Exercícios de Fixação
Pesquise sobre que funções existem pré-definidas em Haskell na bibilioteca padrão, que se chama Prelude, que realizam operações para valores inteiros e de ponto flutuante (Float).
Escreva a declaração de uma função que:
Tem como entrada dois inteiros e devolve um booleano
Tem como entrada um inteiro e um char e devolve um float
Tem como entrada dois char e devolve um booleano
Escreva as declarações e definições de funções para :
Dados dois inteiros , retornar o triplo da divisão inteira destes números
Dados dois caracteres, retornar o menor deles de acordo com a ordem alfabética
Dados dois inteiros, retornar True se forem iguais em valor absoluto; caso contrário, retornar False
23
Leituras
Capítulo 3 do livro do Simon (Basic Types and Definitions)
24
Sugestão de vídeo
Haskell – Introdução (João Paulo Leite)
	https://www.youtube.com/watch?v=ucDfN8NDa6Q&list=PLsri1g4fxrjskpZMS10kYJG0xWrYHZ911
25

Outros materiais