Programação Funcional. Aula 3. Tipos e Classes. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Tamanho: px
Começar a partir da página:

Download "Programação Funcional. Aula 3. Tipos e Classes. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011."

Transcrição

1 Programação Funcional Aula 3 Tipos e Classes José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

2 O que é um tipo? Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, em Haskell o tipo básico Bool contém os dois valores lógicos: False True José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

3 Erros de tipo A aplicação de uma função a um ou mais argumentos do tipo errado constitui um erro de tipo. Por exemplo: > 1 + False <interactive>:0:1: No instance for (Num Bool) arising from the literal 1 Possible fix: add an instance declaration for (Num Bool) In the first argument of (+), namely 1 In the expression: 1 + False In an equation for it : it = 1 + False 1 é um número e False é um valor lógico, mas + requer dois números. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

4 Tipos em Haskell Se a avaliação de uma expressão e produz um valor do tipo t, então o tipo de e é t, e escrevemos: e :: t Toda expressão bem formada tem um tipo, que pode ser calculado automaticamente em tempo de compilação usando um processo chamado inferência de tipos. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

5 Tipos em Haskell (cont.) Todos os erros de tipo são encontrados em tempo de compilação, o que torna os programas mais seguros e mais rápidos, eliminando a necessidade de verificações de tipo em tempo de execução. No GHCi, o comando :type calcula o tipo de uma expressão, sem avaliá-la: Prelude> not False True Prelude> :type not False not False :: Bool Prelude> José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

6 Tipos básicos Haskell tem um número de tipos básicos, incluindo: Bool Char String Int Integer Float Double Rational valores lógicos caracteres simples seqüências de caracteres inteiros de precisão fixa inteiros de precisão arbitrária núm. em ponto flutuante com precisão simples núm. em ponto flutuante com precisão dupla números racionais de precisão arbitrária José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

7 Tipos listas Uma lista é uma seqüência de valores do mesmo tipo. Uma lista pode ser escrita colocando os elementos da seqüência entre colchetes e separados por vírgula. Exemplos: [False,True,False] :: [Bool] [ a, b, c, d ] :: [Char] ["bom","dia","brasil"] :: [String] [1,8,6,0,21] :: [Int] [3.4,5.6,3.213] :: [Double] [2%3,5%1,-6%10] :: [Rational] Em geral: [ t ] é o tipo das listas cujos elementos são do tipo t. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

8 Tipos listas (cont.) A lista vazia é escrita como [] O tipo de uma lista não diz nada sobre seu tamanho: [False,True] :: [Bool] [False,True,False] :: [Bool] O tipo dos elementos é irrestrito. Por exemplo, podemos ter listas de listas: [[False,True],[False,True,False]] :: [[Bool]] [[ a ],[ b, c ],[ %, * ],[]] :: [[Char]] [[[1,2,3],[10,20,30]],[[-1,-2]]] :: [[[Int]]] José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

9 Tipos tupla Uma tupla é uma seqüência de valores de diferentes tipos. Uma tupla é escrita colocando os elementos da seqüência entre parênteses e separados por vírgula. Exemplos: (False,True) :: (Bool,Bool) (False, a,true) :: (Bool,Char,Bool) ("Joel",16,5.34,True) :: (String,Int,Float,Bool) Em geral: ( t 1, t 2,..., t n ) é o tipo das n-uplas cujos i-ésimo componentes são do tipo t i, para qualquer i [1..n]. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

10 Tipos tupla (cont.) A tupla vazia é escrita como () e o seu tipo é (), chamado de unit. O tipo de uma tupla codifica o seu tamanho: (False,True) :: (Bool,Bool) (False,True,False) :: (Bool,Bool,Bool) O tipo dos componentes de uma tupla é irrestrito. Por exemplo: ( a,(false, b )) ::(Char,(Bool,Char)) (True,[ a, b ]) ::(Bool,[Char]) (5.6,("Ana",18), F ) ::(Double,(String,Int),Char) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

11 Tipos tupla (cont.) Não há tuplas de um único elemento por questão de sintaxe, já que qualquer expressão pode ser escrita entre parênteses sem alterar o seu significado. ( a ) :: Char José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

12 Tipos função Uma função é um mapeamento de valores de um tipo para valores de outro tipo Exemplos de funções do prelúdio: not :: Bool -> Bool and :: [Bool] -> Bool or :: [Bool] -> Bool isdigit :: Char -> Bool Em geral: t 1 -> t 2 é o tipo das funções que mapeiam valores do tipo t 1 em valores do tipo t 2. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

13 Tipos função (cont.) Os tipos do argumento e do resultado são irrestritos. Por exemplo, funções com múltiplos argumentos ou resultados são possíveis usando listas ou tuplas: add :: (Int,Int) -> Int add (x,y) = x + y zeroto zeroto n :: Int -> [Int] = [0..n] José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

14 Funções curried Funções com múltiplos argumentos são também possíveis, retornando funções como resultados. Exemplo: add :: Int -> (Int -> Int) add x y = x + y add tem como argumento um inteiro x e retorna uma função add x. Por sua vez, esta função recebe um inteiro y e retorna o resultado x + y. add :: Int -> (Int -> Int) add x = add2 where add2 y = x + y José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

15 Funções curried (cont.) add e add produzem o mesmo resultado final, mas add recebe seus dois argumentos ao mesmo tempo, enquanto que add recebe-os um de cada vez. add :: (Int,Int) -> Int add :: Int -> (Int -> Int) Funções que recebem os seus argumentos um por vez são chamadas de funções curried, celebrando o trabalho de Haskell Curry em tais funções. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

16 Funções curried (cont.) Funções com mais de dois argumentos podem ser curried, retornando funções aninhadas. Exemplo: mult :: Int -> (Int -> (Int -> Int)) mult x y z = x * y * z mult recebe um inteiro x e retorna uma função mult x, que por sua vez recebe um y inteiro e retorna uma função mult x y, que finalmente recebe um z inteiro e retorna o resultado x * y * z. mult :: Int -> (Int -> (Int -> Int)) mult x = mult1 where mult1 y = mult2 where mult2 z = x * y * z José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

17 Por que currying é útil? Funções curried são mais flexíveis do que as funções em tuplas, porque funções úteis podem muitas vezes ser feitas pela aplicação parcial de uma função curried. Por exemplo: add 1 :: Int -> Int take 5 :: [Int] -> [Int] drop 5 :: [Int] -> [Int] José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

18 Convenções sobre currying Para evitar excesso de parênteses ao usar funções curried, duas convenções simples são adotadas: A seta -> associa à direita. Int -> Int -> Int -> Int significa Int -> (Int -> (Int -> Int)) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

19 Convenções sobre currying (cont.) Como conseqüência, é então natural que a aplicação de função tem associatividade à esquerda. mult x y z significa ((mult x) y) z José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

20 Convenções sobre currying (cont.) A menos que seja explicitamente necessário o uso de tuplas, todas as funções em Haskell são normalmente definidas em forma de curried. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

21 Funções polimórficas Algumas funções podem operar sobre vários tipos de dados. Por exemplo: a função head recebe uma lista e retorna o primeiro elemento da lista: Prelude> head [ b, a, n, a, n, a ] b Prelude> head ["maria","paula","peixoto"] "maria" Prelude> head [True,False,True,True] True Prelude> head [("ana",2.8),("pedro",4.3)] ("ana",2.8) Não importa qual é o tipo dos elementos da lista. Qual é o tipo de head? José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

22 Funções polimórficas (cont.) Quando um tipo pode ser qualquer tipo da linguagem, ele é representado por uma variável de tipo. No exemplo dado, sendo a o tipo dos elementos da lista que é passada como argumento para a função head, então head :: [a] -> a a é uma variável de tipo e pode ser substituída por qualquer tipo. O tipo de head estabelece que head recebe uma lista com elementos de um tipo qualquer, e retorna um valor deste tipo. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

23 Funções polimórficas (cont.) Uma função é chamada polimórfica (de muitas formas) se o seu tipo contém uma ou mais variáveis de tipo. Exemplo: length :: [a] -> Int para qualquer tipo a, length recebe uma lista de valores do tipo a e retorna um inteiro. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

24 Funções polimórficas (cont.) As variaveis de tipo podem ser instanciadas para diferentes tipos em diferentes circunstâncias: > length [False,True] -- a = Bool 2 > length [1,2,3,4] -- a = Int 4 As variáveis de tipo devem começar com uma letra minúscula, e são geralmente denominadas a, b, c, etc. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

25 Funções polimórficas (cont.) Muitas das funções definidas no prelúdio padrão são polimórficas. Por exemplo: fst :: (a,b) -> a head :: [a] -> a take :: Int -> [a] -> [a] zip :: [a] -> [b] -> [(a,b)] id :: a -> a José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

26 Sobrecarga Uma função polimórfica é sobrecarregada se seu tipo contém uma ou mais restrições de classe. Exemplo: sum :: Num a => [a] -> a para qualquer tipo numérico sum, recebe uma lista de valores do tipo a e retorna um valor do tipo a. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

27 Sobrecarga (cont.) Variáveis de tipo restritas podem ser instanciadas para quaisquer tipos que satisfazer as restrições. Exemplo: > sum [1,2,3] -- a = Int 6 > sum [1.1,2.2,3.3] -- a = Float 6.6 > sum [ a, b, c ] -- Char não é um tipo numérico ERROR José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

28 Classes básicas Uma classe é uma coleção de de tipos que suportam certas operações sobrecarregadas chamadas métodos. Haskell tem várias classes de tipo pré-definidas. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

29 Classes básicas: Eq Formada pelos tipos cujos valores podem ser comparados por igualdade e desigualdade usando os métodos: (==) :: Eq a => a -> a -> Bool (/=) :: Eq a => a -> a -> Bool São instâncias de Eq: todos os tipos básicos Bool, Char, String, Int, Integer, Float, Double e Rational. todos os tipos listas cujo tipo dos elementos é instância de Eq todos os tipos tuplas cujos tipos dos componentes são todos instância de Eq Tipos função não são instâncias de Eq.q José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

30 Classes básicas: Eq (cont.) Exemplos: Prelude> a == b False Prelude> "abc" == "abc" True Prelude> [1,2] == [1,2,3] False Prelude> ( a,false) == ( a,false) True Prelude> (1,2) /= (2,1) True José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

31 Classes básicas: Ord Formada pelos tipos que são instâncias de Eq e cujos valores são ordenados totalmente (linearmente), podendo ser comparados usando os métodos: (<) :: Ord a => a -> a -> Bool (<=) :: Ord a => a -> a -> Bool (>) :: Ord a => a -> a -> Bool (>=) :: Ord a => a -> a -> Bool compare :: Ord a => a -> a -> Ordering min :: Ord a => a -> a -> a max :: Ord a => a -> a -> a O método compare recebe dois valores e retorna um resultado do tipo Ordering: GT, LT, EQ. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

32 Classes básicas: Ord (cont.) São instâncias de Ord: todos os tipos básicos Bool, Char, String, Int, Integer, Float, pyginline Double e Rational. todos os tipos listas cujo tipo dos elementos é instância de Ord todos os tipos tuplas cujos tipos dos componentes são todos instância de Ord Strings, listas e tuplas são ordenadas lexicograficamente (da mesma maneira que as palavras em um dicionário). José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

33 Classes básicas: Ord (cont.) Exemplos: Prelude> False < True True Prelude> min a b a Prelude> "elegante" < "elefante" False Prelude> [1,2,3] > [1,2] True Prelude> ( a,2) >= ( b,1) False Prelude> compare "Abracadabra" "Zebra" LT Prelude> compare 5 3 GT Prelude Data.Ratio> compare (4%5) (20%25) EQ José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

34 Classes básicas: Show Formada pelos tipos cujos valores podem ser convertidos para strings usando o método: show :: Show a => a -> String São instâncias de Show: todos os tipos básicos Bool, Char, String, Int, Integer, Float, Double e Rational. todos os tipos listas cujo tipo dos elementos é instância de Show todos os tipos tuplas cujos tipos dos componentes são todos instância de Show Tipos função não são instâncias de Show. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

35 Classes básicas: Show (cont.) Exemplos: Prelude> show False "False" Prelude> show a " a " Prelude> show 9172 "9172" Prelude> show [123,-764,0,18] "[123,-764,0,18]" Prelude> show ( a,true) "( a,true)" José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

36 Classes básicas: Read Formada pelos tipos cujos valores podem ser convertidos a partir de strings usando o método: read :: Read a => String -> a Read e Show são duais. São instâncias de Read: todos os tipos básicos Bool, Char, String, Int, Integer, Float, Double e Rational. todos os tipos listas cujo tipo dos elementos é instância de Read todos os tipos tuplas cujos tipos dos componentes são todos instância de Read Tipos função não são instâncias de Read. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

37 Classes básicas: Read (cont.) Exemplos: Prelude> read "False" :: Bool False Prelude> read " a " :: Char a Prelude> read "123" :: Int 123 Prelude> read "[1,2,3]" :: [Int] [1,2,3] Prelude> read "[1,2,3]" :: [Double] [1.0,2.0,3.0] Prelude> read "( a,false,5.6)" :: (Char,Bool,Double) ( a,false,5.6) Prelude> not (read "False") True Prelude> not (read "marcos") *** Exception: Prelude.read: no parse José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

38 Classes básicas: Read (cont.) Prelude> read "4" <interactive>:0:1: Ambiguous type variable a0 in the constraint: (Read a0) arising from a use of read Probable fix: add a type signature that fixes these type In the expression: read "4" In an equation for it : it = read "4" O uso de :: é necessário nestes exemplos para definir o tipo do resultado. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

39 Classes básicas: Enum Formada pelos tipos sequencialmente ordenados (cujos valores podem ser enumerados), podendo ser processados usando os métodos: succ :: Enum a => a -> a pred :: Enum a => a -> a toenum :: Enum a => Int -> a fromenum :: Enum a => a -> Int enumfrom :: Enum a => a -> [a] enumfromthen :: Enum a => a -> a -> [a] enumfromto :: Enum a => a -> a -> [a] enumfromthento :: Enum a => a -> a -> a -> [a] São instâncias de Enum os tipos básicos (), Bool, Char, Int, Integer, Float, Double, Rational e Ordering José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

40 Classes básicas: Enum (cont.) Exemplos: Prelude> succ Prelude> pred M L Prelude> fromenum A 65 Prelude> toenum 65 :: Char A Prelude> fromenum Prelude> toenum 5 :: Float 5.0 Prelude> fromenum True 1 Prelude> not (toenum 0) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

41 Classes básicas: Enum (cont.) True Prelude> enumfromto 4 10 [4,5,6,7,8,9,10] Prelude> enumfromthento [4,7,10,13,16,19] Prelude> take 10 (enumfrom 100) [100,101,102,103,104,105,106,107,108,109] Prelude> take 10 (enumfromthen A C ) "ACEGIKMOQS" Prelude Data.Ratio> enumfromto (2%3) 5 [2 % 3,5 % 3,8 % 3,11 % 3,14 % 3] José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

42 Classes básicas: Bounded Formada pelos tipos que possuem um valor mínimo e um valor máximo, definidos pelos métodos: minbound :: Bounded a => a maxbound :: Bounded a => a São instâncias de Bounded os tipos básicos (), Bool, Char, Int, Ordering, e os tipos tuplas cujos componentes são de tipos que são instâncias de Bounded. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

43 Classes básicas: Bounded (cont.) Exemplos: Prelude> minbound :: Bool False Prelude> minbound :: Char \NUL Prelude> minbound :: Int Prelude> maxbound :: (Bool,Int,Ordering,()) (True, ,GT,()) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

44 Classes básicas: Num Formada pelos tipos que são instâncias de Eq e Show e cujos valores são numéricos, podendo ser processados usando os métodos: (+) :: Num a => a -> a -> a (-) :: Num a => a -> a -> a (*) :: Num a => a -> a -> a negate :: Num a => a -> a abs :: Num a => a -> a signum :: Num a => a -> a São instâncias de Num os tipos básicos Int, Integer, Float, Double e Rational. Observe que a classe Num não oferece um método para divisão. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

45 Classes básicas: Num (cont.) Exemplos: Prelude> Prelude> Prelude> negate Prelude> abs (-3) 3 Prelude> signum (-3) -1 José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

46 Classes básicas: Real Formada pelos tipos que são instâncias de Num e Ord e cujos valores podem ser expressos como uma razão de dois números inteiros de precisão arbitrária através do método: torational :: Real a => a -> Rational Real é formada pelos tipos numéricos cujos valores podem ser comparados com (<) e demais operações relacionais da classe Ord. Nem todos os números podem ser comparados com (<), como por exemplo os números complexos. Todo número real de precisão finita pode ser expresso como um número racional. São instâncias de Real os tipos básicos Int, Integer, Float, Double e Rational. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

47 Classes básicas: Real (cont.) Exemplos: Prelude> torational % 1 Prelude> torational (-4.5) (-9) % 2 Prelude> torational % José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

48 Classes básicas: Integral Formada pelos tipos que são instâncias de Real e Enum, e cujos valores são números inteiros, suportando a operação de divisão inteira e podem ser processados usando os métodos: div :: Integral a => a -> a -> a mod :: Integral a => a -> a -> a divmod :: Integral a => a -> a -> (a, a) tointeger :: Integral a => a -> Integer São instâncias de Integral os tipos básicos Int e Integer. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

49 Classes básicas: Integral (cont.) Exemplos: Prelude> div Prelude> mod Prelude> divmod 20 3 (6,2) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

50 Classes básicas: Integral (cont.) A função fromintegral :: (Integral a, Num b) => a -> b recebe um número integral e retorna este número convertido para um tipo numérico. Exemplo: Prelude> fromintegral 17 :: Double 17.0 Prelude> fromintegral (length [1,2,3,4]) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

51 Classes básicas: Fractional Formada pelos tipos que são instâncias de Num e cujos valores não são números inteiros, suportando as operações de divisão fracionária e recíproco, usando os métodos: (/) :: Fractional a => a -> a -> a recip :: Fractional a => a -> a São instâncias de Fractional os tipos básicos Float, Double e Rational. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

52 Classes básicas: Fractional (cont.) Exemplos: Prelude> 7.0 / Prelude> recip José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

53 Classes básicas: Floating Formada pelos tipos que são instâncias de Fractional e cujos valores podem ser processados usando os métodos: pi :: Floating a => a exp :: Floating a => a -> a sqrt :: Floating a => a -> a log :: Floating a => a -> a (**) :: Floating a => a -> a -> a logbase :: Floating a => a -> a -> a sin :: Floating a => a -> a tan :: Floating a => a -> a cos :: Floating a => a -> a asin :: Floating a => a -> a atan :: Floating a => a -> a acos :: Floating a => a -> a sinh :: Floating a => a -> a José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

54 Classes básicas: Floating (cont.) tanh cosh asinh atanh acosh :: Floating a => a -> a :: Floating a => a -> a :: Floating a => a -> a :: Floating a => a -> a :: Floating a => a -> a São instâncias de Floating os tipos básicos Float e Double. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

55 Classes básicas: Floating (cont.) Exemplos: Prelude> pi Prelude> exp Prelude> sin (pi/2) 1.0 Prelude> atan (-1) Prelude> logbase José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

56 Classes básicas: RealFrac Formada pelos tipos que são instâncias de Real e Fractional (cujos valores não são números reais fracionários), e seus valores podem ser processados com os métodos: properfraction :: (RealFrac a, Integral b) => a -> (b,a) truncate :: (RealFrac a, Integral b) => a -> b round :: (RealFrac a, Integral b) => a -> b ceiling :: (RealFrac a, Integral b) => a -> b floor :: (RealFrac a, Integral b) => a -> b São instâncias de RealFrac os tipos básicos Float, Double e Rational. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

57 Classes básicas: RealFrac (cont.) Exemplos: Prelude Data.Ratio> truncate Prelude Data.Ratio> round Prelude Data.Ratio> ceiling Prelude Data.Ratio> floor Prelude Data.Ratio> properfraction (2, ) Prelude Data.Ratio> properfraction (9%4) (2,1 % 4) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

58 Sobrecarga de literais Literais também podem ser sobrecarregados: 187 :: Num a => a :: Num a => a 3.4 :: Fractional a => a E13 :: Fractional a => a José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

59 Dicas e Sugestões Ao definir uma nova função em Haskell, é útil começar por escrever o seu tipo. Dentro de um script, é uma boa prática indicar o tipo de cada nova função definida. Ao indicar os tipos de funções polimórficas que usam números, igualdade, ou ordenações (ou outras resstrições), tome o cuidado de incluir as restrições de classe necessárias. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

60 Exercícios 1 Quais são os tipos dos valores a seguir? a) [ a, b, c ] b) ( a, b, c ) c) [(False, 0 ),(True, 1 )] d) ([False,True],[ 0, 1 ]) e) [tail,init,reverse] f) [] g) [[]] h) [[10,20,30],[],[5,6],[24]] i) (10e-2,20e-2,30e-3) j) [(2,3),(4,5.6),(6,4.55)] k) reverse l) [take 5,tail] m) (["bom","dia","brasil"],sum,drop 7) n) [sum,length] José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

61 Exercícios (cont.) 2 Quais são os tipos das seguintes funções? a) second xs = head (tail xs) b) swap (x,y) = (y,x) c) pair x y = (x,y) d) double x = x*2 e) palindrome xs = reverse xs == xs f) twice f x = f (f x) José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

62 Exercícios (cont.) 3 Verifique suas respostas aos exercícios anteriores usando o GHCi. José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

63 Fim José Romildo Malaquias (UFOP) PF-03 Tipos e Classes / 63

Programação Funcional Capítulo 3 Tipos e Classes

Programação Funcional Capítulo 3 Tipos e Classes Programação Funcional Capítulo 3 Tipos e Classes José Romildo Malaquias 2012.1 Departamento de Computação Universidade Federal de Ouro Preto 1 / 68 1 Valores, expressões e tipos 2 Listas 3 Tuplas 4 Funções

Leia mais

Programação Funcional. Capítulo 3. Tipos. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2017.

Programação Funcional. Capítulo 3. Tipos. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2017. Programação Funcional Capítulo 3 Tipos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2017.2 1/77 1 Tipo 2 Tipos Básicos 3 Tipo de uma expressão 4 Polimorfismo paramétrico

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes Programação Funcional 2 a Aula Tipos e classes Pedro Vasconcelos DCC/FCUP 2014 Tipos Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, o tipo Bool True contém dois valores lógicos:

Leia mais

Classes de Tipos. Programação Funcional. Capítulo 12. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Classes de Tipos. Programação Funcional. Capítulo 12. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 12 Classes de Tipos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/43 1 Classes de tipos 2/43 Tópicos 1 Classes de tipos 3/43

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes Programação Funcional 2 a Aula Tipos e classes Pedro Vasconcelos DCC/FCUP 2012 Tipos Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, o tipo Bool True contém dois valores lógicos:

Leia mais

Programação Funcional 14 a Aula Classes de tipos revisitadas

Programação Funcional 14 a Aula Classes de tipos revisitadas Programação Funcional 14 a Aula Classes de tipos revisitadas Sandra Alves DCC/FCUP 2017/18 Classes de tipos As classes de tipos agrupam tipos de valores que suportam operações comuns. Eq igualdade (==,

Leia mais

Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 7 Expressões Lambda José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/64 1 Valores de primeira classe 2 Expressão lambda 3 Aplicação

Leia mais

Aula prática 14. Expressão Lambda

Aula prática 14. Expressão Lambda Programação Funcional UFOP DECOM 2014.1 Aula prática 14 Expressão Lambda Sumário Resumo Expressões lambdas são funções anônimas que podem ser usadas como qualquer outro valor de primeira classe. Nesta

Leia mais

4.2. CLASSES Versão

4.2. CLASSES Versão 4.2. CLASSES Versão 1.5 28 4.2 Classes Em Haskell é possível definir novos tipos e inseri-los na estrutura de classe de tipos. Desta forma é possível obter funções para comparar valores dos novos tipos,

Leia mais

Introdução à Programação uma Abordagem Funcional

Introdução à Programação uma Abordagem Funcional Universidade Federal do Espírito Santo Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres boeres@inf.ufes.br CT VII - Sala 34 Departamento de Informática Centro Tecnológico

Leia mais

Expressões Condicionais

Expressões Condicionais Programação Funcional Capítulo 4 Expressões Condicionais José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.1 1/38 1 Combinando funções 2 Expressão condicional 3

Leia mais

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013 Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1 1 Linguagem Haskell Linguagem de programação funcional É um paradigma de programação

Leia mais

Programação Funcional. Aula 6. Listas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Programação Funcional. Aula 6. Listas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011. Programação Funcional Aula 6 Listas José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011.2 1/104 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com

Leia mais

Tipos de Dados. Capítulo Tipos de Base

Tipos de Dados. Capítulo Tipos de Base Capítulo 2 s de Dados O Haskell é uma linguagem de programação com uma disciplina de tipos rigorosa ( strongly typed ), quer isto dizer que toda a entidade num programa em Haskell tem um, e um só, tipo,

Leia mais

Expressões Condicionais

Expressões Condicionais Programação Funcional Capítulo 4 Expressões Condicionais José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/39 1 Combinando funções 2 Expressão condicional 3

Leia mais

Funções de Ordem Superior

Funções de Ordem Superior Programação Funcional Capítulo 7 Funções de Ordem Superior José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.2 1/37 1 Funções de Ordem Superior 2 Composição de funções

Leia mais

Aula Prática 2. Paradigmas da Programação I / Programação Funcional

Aula Prática 2. Paradigmas da Programação I / Programação Funcional Aula Prática 2 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se introduzir os conceitos seguintes: valores e expressões; tipos básicos e tipos compostos;

Leia mais

Programação Funcional

Programação Funcional Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto lucilia@dcc.ufmg.br Aula 04: Definição de funções 1 DEFINIÇÃO DE FUNÇÕES f x1 x2...xn = E Define uma função f de tipo

Leia mais

Introdução à Programação. Uma Abordagem Funcional

Introdução à Programação. Uma Abordagem Funcional Introdução à Programação Uma Abordagem Funcional Tipos em Haskell Linguagem fortemente tipada Em Haskell, conhecendo-se o tipo das operações e funções que compõem uma expressão podemos determinar o tipo

Leia mais

Linguagem Haskell. Riocemar S. de Santana

Linguagem Haskell. Riocemar S. de Santana Linguagem Haskell Riocemar S. de Santana Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem ao matemático americano Haskell B. Curry (1900 1982).

Leia mais

Linguagens de Programação Aula 13

Linguagens de Programação Aula 13 Linguagens de Programação Aula 13 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Suporte para a programação orientada a objetos 2 Na aula de hoje Programação Funcional Linguagem Haskell 3 Roteiro

Leia mais

Programação Funcional em Haskell

Programação Funcional em Haskell Funções Genéricas sobre Listas Junho - 2009 1 Funções Genéricas 2 Introdução Em Haskell, como em qualquer linguagem funcional, funções são objetos de primeira classe, em que funções não avaliadas podem

Leia mais

Programação Funcional em Haskell

Programação Funcional em Haskell Programação Funcional em Haskell José Romildo Malaquias BCC222: Programação Funcional Universidade Federal de Ouro Preto Departamento de Computação 2014 2 Sumário 1 O Ambiente Interativo GHCi 1-1 1.1 O

Leia mais

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33

Leia mais

Funções de Ordem Superior

Funções de Ordem Superior Programação Funcional UFOP DECOM 2014.1 Aula prática 15 Funções de Ordem Superior Sumário Resumo Uma função é conhecida como função de ordem superior quando ela tem uma função como argumento ou resulta

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas Programação Funcional 4 a Aula Listas Pedro Vasconcelos DCC/FCUP 2014 Listas Listas são coleções de elementos: em que a ordem é significativa; possivelmente com elementos repetidos. Listas em Haskell Uma

Leia mais

Programação Funcional. Capítulo 21. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2018.

Programação Funcional. Capítulo 21. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2018. Programação Funcional Capítulo 21 Parsers José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2018.2 1/51 1 Parsers 2 Definindo um tipo para parsers 3 Parsers básicos 4

Leia mais

Expressão Condicional

Expressão Condicional Programação Funcional UFOP DECOM 2014.1 Aula prática 4 Expressão Condicional Resumo Expressões condicionais permitem a escolha entre duas alternativas na obtenção do valor da expressão, com base em uma

Leia mais

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 em Haskell 1 em Haskell Noções sobre Construção de por Compreensão Funções Sobre Processamento de Fundamentos em Haskell Noções

Leia mais

Programação Funcional. Aula 4. Definindo Funções. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Programação Funcional. Aula 4. Definindo Funções. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011. Programação Funcional Aula 4 Definindo Funções José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011.2 1/143 1 Combinando funções 2 Expressão condicional 3 Equaçao com

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções Programação Funcional 3 a Aula Definição de funções Pedro Vasconcelos DCC/FCUP 2014 Definição de funções Podemos definir novas funções simples usando funções pré-definidas. minuscula :: Char -> Bool minuscula

Leia mais

Programação Funcional

Programação Funcional Programação Funcional Capítulo 2 Primeiros Passos José Romildo Malaquias 2012.1 Departamento de Computação Universidade Federal de Ouro Preto 1 / 39 1 Glasgow Haskell Compiler 2 O módulo Prelude 3 Aplicação

Leia mais

Programação Funcional Aulas 1 & 2

Programação Funcional Aulas 1 & 2 Programação Funcional Aulas 1 & 2 Sandra Alves DCC/FCUP 2015/16 Funcionamento da disciplina Docentes: Teóricas: Sandra Alves Práticas: Sandra Alves e Rogério Reis Página web http://www.dcc.fc.up.pt/~sandra/home/pf1516.html

Leia mais

Árvores Binárias de Procura. Travessias de árvores binárias

Árvores Binárias de Procura. Travessias de árvores binárias Travessias de árvores binárias Para converter uma árvore binária numa lista podemos usar diversas estratégias, como por exempo: Preorder: R E D Inorder: E R D Postorder: E D R R visitar a raiz E atravessar

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução ao FORTRAN Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

Programação Funcional BCC222. Aulas 5,6. Mais sobre recursão

Programação Funcional BCC222. Aulas 5,6. Mais sobre recursão Programação Funcional BCC222 Aulas 5,6 Mais sobre recursão Lucília Camarão de Figueiredo Departamento de Ciência da Computação Universidade Federal de Ouro Preto Parte I Booleanos e Caracteres Operadores

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Fabrício Olivetti de França 21 de Junho de 2018 1 Listas 2 Listas Uma das principais estruturas em linguagens funcionais. Representa uma coleção de valores de um determinado tipo.

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução ao FORTRAN Professor Hugo de Oliveira Barbalho hbarbalho@ic.uff.br Material produzido pelo professor: Leandro Augusto Frata Fernandes (laffernandes@ic.uff.br)

Leia mais

Programação de Computadores:

Programação de Computadores: Instituto de C Programação de Computadores: Introdução ao FORTRAN Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Introdução ao FORTRAN Cinco aspectos

Leia mais

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves Linguagens de Programação Programação Funcional e Haskell Declarando Tipos Thiago Alves 1 Declarações de Tipos Em Haskell, um novo nome para um tipo existente pode ser definido usando uma declaração de

Leia mais

Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)

Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006) Aula Prática 3 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se que os alunos: consolidem os conceitos de expressão, tipo e redução; compreendam a

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos Programação Funcional 13 a Aula Definição de tipos Pedro Vasconcelos DCC/FCUP 2014 Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão):

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 09 Programação Funcional (Haskell) Edirlei Soares de Lima Programação Funcional A programação funcional modela um problema computacional

Leia mais

Programação Funcional. Capítulo 2. Primeiros Passos. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Programação Funcional. Capítulo 2. Primeiros Passos. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013. Programação Funcional Capítulo 2 Primeiros Passos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.1 1/45 1 Glasgow Haskell Compiler 2 Bibliotecas padrão 3 Aplicação

Leia mais

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto

Leia mais

Linguagens de Programação Funcional

Linguagens de Programação Funcional Linguagens de Programação Funcional George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Introdução O projeto de linguagem imperativas é baseado na arquitetura de von Neumann Eficiência é o objetivo

Leia mais

Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos.

Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos. Valores & Expressões Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos. As expressões são obtidas aplicando funções a valores ou a outras expressões. O interpretador Haskell

Leia mais

Programação Funcional Aulas 9, 10 & 11

Programação Funcional Aulas 9, 10 & 11 Programação Funcional Aulas 9, 10 & 11 Sandra Alves DCC/FCUP 2015/16 1 Programas interativos Motivação Até agora apenas escrevemos programas que efetuam computação pura, i.e., transformações funcionais

Leia mais

Casamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Casamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 6 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/66 1 Casamento de padrão 2 Expressão case 3 Definição

Leia mais

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação

Leia mais

Linguagem Funcional Haskell

Linguagem Funcional Haskell Bacharelado em Ciência da Computação PARADIGMAS DE PROGRAMAÇÃO Linguagem Funcional Haskell Prof. Claudinei Dias email: prof.claudinei.dias@gmail.com Principais Linguagens Funcionais LISP (John McCarthy,

Leia mais

Casamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Casamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 5 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/63 1 Casamento de padrão 2 Expressão case 3 Definição

Leia mais

Programação Funcional com a Linguagem Haskell

Programação Funcional com a Linguagem Haskell Programação Funcional com a Linguagem Haskell André Rauber Du Bois dubois@macs.hw.ac.uk Índice CAPÍTULO 1 Programação em Haskell 4 1.1 Expressões e Funções 4 1.2. Inteiros 6 1.3 Booleanos 8 1.4 Caracteres

Leia mais

Tuplas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Tuplas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro Introdução à Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 Introdução à 1 Introdução à Introdução à e Listas A linguagem Haskell nos fornece dois mecanismos para a construção de dados

Leia mais

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas Programação Funcional 8 a Aula Listas infinitas Pedro Vasconcelos DCC/FCUP 2014 Listas infinitas Podemos usar listas para sequências finitas, por ex.: [1,2,3,4] = 1:2:3:4:[] Nesta aula vamos ver que podemos

Leia mais

Programação Funcional 9 a Aula Programas interativos

Programação Funcional 9 a Aula Programas interativos Programação Funcional 9 a Aula Programas interativos Pedro Vasconcelos DCC/FCUP 2014 Motivação Até agora apenas escrevemos programas que efetuam computação pura, i.e., transformações funcionais entre valores.

Leia mais

Programação Funcional. Aula 10. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto /74 ...

Programação Funcional. Aula 10. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto /74 ... Programação Funcional Aula 10 Parsers José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011.2 1/74 1 Parsers 2 Definindo um tipo para parsers 3 Parsers básicos 4 Combinadores

Leia mais

Programação Funcional. Capítulo 13. Mônadas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012.

Programação Funcional. Capítulo 13. Mônadas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012. Programação Funcional Capítulo 13 Mônadas José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/31 1 Mônadas 2 Entrada e saída 3 Expressão do 4 Computações que podem

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas Programação Funcional 5 a Aula Definições recursivas Pedro Vasconcelos DCC/FCUP 2014 Definições usando outras funções Podemos definir funções usando outras previamente definidas (e.g. do prelúdio-padrão).

Leia mais

Lambda Cálculo e Programação Funcional. Programação Funcional Bacharelado em Sistemas de Informação Maio

Lambda Cálculo e Programação Funcional. Programação Funcional Bacharelado em Sistemas de Informação Maio Lambda Cálculo e Programação Funcional Programação Funcional Bacharelado em Sistemas de Informação Maio - 2009 Alonzo Church (1903 1995) Professor em Princeton, EUA (1929 1967) e UCLA (1967 1990) Inventou

Leia mais

Tipos de Dados Algébricos

Tipos de Dados Algébricos Programação Funcional BCC222 Aulas 11,12 Tipos de Dados Algébricos Lucília Camarão de Figueiredo Departamento de Ciência da Computação Universidade Federal de Ouro Preto Parte I Revisão Diferenças quatro

Leia mais

Programação Funcional

Programação Funcional Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto lucilia@dcc.ufmg.br Aula 07: Funções de Ordem Superior 1 INTRODUÇÃO Uma função é chamada função de ordem superior

Leia mais

Algoritmos e Estrutura de Dados Aula 08 Pilhas

Algoritmos e Estrutura de Dados Aula 08 Pilhas Algoritmos e Estrutura de Dados Aula 08 Pilhas Profa. Alana Oliveira e Prof. Davi Viana alanaslz@gmail.com e davi.viana@lsdi.ufma.br Se não entender, pergunte! Dados e Tipos de Dados Um dado é uma informação

Leia mais

Linguagens de Programação Aula 14

Linguagens de Programação Aula 14 Linguagens de Programação Aula 14 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Linguagem Haskell Funções Tipos básicos Expressões 2 Na aula de hoje Linguagem Haskell Listas 3 Listas e Tuplas

Leia mais

Funções Padronizadas na Linguagem de Programação

Funções Padronizadas na Linguagem de Programação Faculdade de Engenharia da Computação Disciplina: Lógica de Programação Funções Padronizadas na Linguagem de Programação Site : http://www1.univap.br/~wagner/ec.html Prof. Responsáveis Wagner Santos C.

Leia mais

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores Nesta aula... Conteúdo 1 Expressões, valores e tipos 1 2 Variáveis e atribuições 5 1 Expressões, valores e tipos Expressões e valores Tipos programas calculam expressões para produzir valores cálculo de

Leia mais

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio

Leia mais

Aula 12- Variáveis e valores reais

Aula 12- Variáveis e valores reais Aula 12- Variáveis e valores reais Até agora todos os nossos problemas continham apenas valores inteiros e portanto variáveis do tipo int. Para resolver problemas que usam valores com parte fracionária,

Leia mais

Introdução à Ciência da Computação

Introdução à Ciência da Computação Introdução à Ciência da Computação Unidade III Programação de Computadores com Octave Uso do Octave no Modo Interativo Prof. Roberto M. de Faria/DSC/UFCG Ajuda para o Octave Para ter acesso à documentação

Leia mais

Conhecendo a Linguagem de Programação C

Conhecendo a Linguagem de Programação C Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Conhecendo a Linguagem de Programação C DCA0800 - Algoritmos e Lógica de Programação Heitor Medeiros 1 Como

Leia mais

Programação Funcional Aulas 5 & 6

Programação Funcional Aulas 5 & 6 Programação Funcional Aulas 5 & 6 Sandra Alves DCC/FCUP 2016/17 Definições usando outras funções Podemos definir funções usando outras previamente definidas (por exemplo: do prelúdio-padrão). Exemplo:

Leia mais

Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL

Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL Sobre a Linguagem Haskell Inicialmente temos no trabalho o uso da versão

Leia mais

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java Linguagem Java Objetivos Compreender como desenvolver algoritmos básicos em JAVA Aprender como escrever programas na Linguagem JAVA baseando-se na Linguagem Portugol aprender as sintaxes equivalentes entre

Leia mais

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012.

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012. Programação Funcional Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/35 1 Programação Funcional 2 Algumas características de Haskell

Leia mais

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias SCC 12 - Introdução à Programação para Engenharias Tipos de Dados e Variáveis Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto Menezes

Leia mais

Aula prática 5. Funções Recursivas

Aula prática 5. Funções Recursivas Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário

Leia mais

Programas Interativos

Programas Interativos Programação Funcional DECOM UFOP 2012-1 Aula prática Capítulo 8 Prof. José Romildo Malaquias Programas Interativos Resumo Nesta aula pretende-se explorar construção de programas interativos usando ações

Leia mais

Lista de Exercício de Linguagens de Programação Prog. Funcional

Lista de Exercício de Linguagens de Programação Prog. Funcional UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE CIÊNCIA E TECNOLOGIA CURSO DE CIÊNCIA DA COMPUTAÇÃO Lista de Exercício de Linguagens de Programação Prog. Funcional 1) Construa uma função del_posicao_n ::

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

Conceito de Linguagens de Programação - 1

Conceito de Linguagens de Programação - 1 Conceito de Linguagens de Programação - 1 Arthur Jovita, Thalles Silva November 1, 2011 1 Natureza das linguagens de Programação Linguagens Estáticas e Dinâmicas 2 Tipificação 3 4 Linguagens Estáticas

Leia mais

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java Linguagem Java Objetivos????? ADAPTAR O TEXTO ABAIXO????? Aprender a sintaxe da Estrutura de Repetição ENQUANTO-FAÇA na linguagem PORTUGOL Aprender a resolver problemas que requeiram o uso de ESTRUTURAS

Leia mais

Programação Aplicada à Engenharia

Programação Aplicada à Engenharia Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Programação Aplicada à Engenharia Aula 07: Aritmética e Tomada de decisão Silvio Fernandes 2009.1 1 Operadores Aritméticos Operadores

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Vírgula flutuante. Tipos float, double, long double. Uso de funções. Exercícios

Vírgula flutuante. Tipos float, double, long double. Uso de funções. Exercícios Vírgula flutuante. Tipos float, double, long double. Uso de funções. Exercícios David Déharbe 1 1 Objetivos da aula Complementar os conhecimentos sobre a construção de expressões Novos tipos para valores

Leia mais

HASKELL. Seminário Linguagens de Programação. Vitor de Nardi Moreschi. Pâmella de Oliveira

HASKELL. Seminário Linguagens de Programação. Vitor de Nardi Moreschi. Pâmella de Oliveira Seminário Linguagens de Programação Pâmella de Oliveira Vitor de Nardi Moreschi HASKELL Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Junho de 2015 Agenda 1. Introdução

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli Vetores De modo geral, em linguagem de programação, vetores ou arrays são estruturas de dados que permitem que uma mesma variável possa armazenar mais de um valor; Em Java, vetores são coleções de dados,

Leia mais

Computação 1. Aula 4 - Teórica Professor: Leonardo Carvalho

Computação 1. Aula 4 - Teórica Professor: Leonardo Carvalho Computação 1 Aula 4 - Teórica Professor: Leonardo Carvalho Planejamento Relembrando Valores numéricos int, float operações: + - * / // ** % Variáveis atribuição simples e múltipla Sequências: str, tuple,

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 3.3. Conceitos Básicos de C: Expressões, Operadores e Bibliotecas

Leia mais

Programação Funcional

Programação Funcional Programação Funcional com Haskell Fabrício Olivetti de França Universidade Federal do ABC Paradigma Funcional Paradigmas Em muitos cursos de Computação e Engenharia iniciam com paradigma imperativo. Exemplo

Leia mais

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO Dados em Algoritmos Quando escrevemos nossos programas, trabalhamos com: Dados que nós fornecemos ao programa Dados

Leia mais

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza Algoritmos: Conceitos Fundamentais Slides de autoria de Rosely Sanches e Simone Senger de Souza DADOS E EXPRESSÕES Uso da Informação Computador manipula informações contidas em sua memória. Classificadas

Leia mais

Programação I Aula 3 Primeiros programas

Programação I Aula 3 Primeiros programas Programação I Aula 3 Primeiros programas Pedro Vasconcelos DCC/FCUP 2018 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 3 Primeiros programas 2018 1 / 23 Nesta aula... 1 Tipos básicos 2 Variáveis e atribuições

Leia mais

Pré-processamento de Dados

Pré-processamento de Dados Pré-processamento de Dados Fabrício Olivetti de França Universidade Federal do ABC Pré-Processamento dos Dados Tópicos 1. Pré-Processamento dos Dados 2. Conceitos Básicos 3. Representação Textual 4. Padrões

Leia mais

Aula prática 2. Definindo Funções. Resumo Vamos aprender nesta aula a fazer nossas primeiras definições de função. 1 Scripts 1.

Aula prática 2. Definindo Funções. Resumo Vamos aprender nesta aula a fazer nossas primeiras definições de função. 1 Scripts 1. Programação Funcional UFOP DECOM 2014.1 Aula prática 2 Definindo Funções Sumário Resumo Vamos aprender nesta aula a fazer nossas primeiras definições de função. 1 Scripts 1 2 Comentários 2 3 Regra de layout

Leia mais

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli Vetores De modo geral, em linguagem de programação, vetores ou arrays são estruturas de dados que permitem que uma mesma variável possa armazenar mais de um valor; Em Java, vetores são coleções de dados,

Leia mais