Programação Funcional. Aula 6. Listas. 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 6. Listas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011."

Transcrição

1 Programação Funcional Aula 6 Listas José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto /104

2 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 2/104

3 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 3/104

4 Listas Lista é uma seqüência de elementos de um mesmo tipo. [a] é o tipo das listas cujos elementos são do tipo a Estruturalmente a forma de uma lista pode ser: lista vazia nenhum elemento na seqüência construtor de dado: (constante) [] :: [a] lista não vazia formada por dois componentes: cabeça: o primeiro elemento da lista cauda: lista de todos os demais elementos, a partir do segundo construtor de dado: (dois argumentos) infixr 5 : (:) :: a -> [a] -> [a] O primeiro argumento é a cabeça da lista. O segundo argumento é a cauda da lista. 4/104

5 Exemplos de listas [] seqüência vazia (nenhum elemento) não tem cabeça e nem cauda tipo: [a] é um valor polimórfico, pois pertence a todos os tipos lista 5/104

6 Exemplos de listas (cont.) False : [] seqüência: False cabeça: False cauda: [] tipo: [Bool] 6/104

7 Exemplos de listas (cont.) a : ( b : []) seqüência: a, b cabeça: a cauda: b : [] tipo: [Char] 7/104

8 Exemplos de listas (cont.) 15 : (9 : (42 : [])) seqüência: 15, 9, 42 cabeça: 15 cauda: 9 : (42 : []) tipo: Num a => [a] 8/104

9 Exemplos de listas (cont.) 15 : (9.45 : (15 : (0 : []))) seqüência: 15, 9.45, 15, 0 cabeça: 15 cauda: 9.45 : (15 : (0 : [])) tipo: Fractional a => [a] 9/104

10 Exemplos de listas (cont.) 15 : ( H : (False : [])) não é uma expressão válida, uma vez que todos os elementos de uma lista devem ser de um mesmo tipo. 10/104

11 Notações de listas O construtor constante [] denota a lista vazia. O construtor : constrói uma lista não vazia a partir da cabeça e da cauda. : é um operador binário infixo com precedência 5 e associatividade à direita. Isto significa que os parênteses no segundo argumento geralmente são desnecessários. Exemplo: o valor 100 : 200 : 300 : 400 : [] é idêntido a 100 : (200 : (300 : (400 : []))) 11/104

12 Notações de listas (cont.) Uma lista finita pode ser denotada escrevendo os seus elementos entre colchetes e separados por vírgula: [ exp 1,..., exp n ] Esta é uma notação simplificada para listas finitas, sendo equivalente a exp 1 :... : exp n : [] 12/104

13 Notações de listas (cont.) Exemplo: A lista de 6 números [10, 20, 30, 40, 50, 60] é apenas uma abreviação sintática para 10 : 20 : 30 : 40 : 50 : 60 : [] 13/104

14 Notações de listas (cont.) Exemplo: A lista [[]] que é uma abreviação para [] : [] é a lista unitária cujo único elemento é a lista vazia. O seu tipo é [[a]]. 14/104

15 Exercícios Exercício 1 Dê um exemplo de uma expressão que contenha duas ocorrências da lista vazia, sendo a primeira ocorrência do tipo [Bool] e a segunda do tipo [Char]. 15/104

16 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 16/104

17 Strings Em Haskell strings (cadeias de caracteres) são simplesmente listas de caracteres. O tipo String é um sinônimo para [Char]. Existe uma notação especial para constantes strings: a seqüência de caracteres é escrita entre aspas ". Exemplos: A string "UFOP" é apenas uma sintaxe conveniente para a lista de caracteres [ U, F, O, P ] A string vazia "" é o mesmo que [], a lista vazia, do tipo [Char]. 17/104

18 Strings (cont.) Códigos de escape podem ser usados em constantes caracter e constantes strings para representar alguns caracteres. Exemplos: \n \\ "bom\ndia\nbrasil" "abcd\tefg" "\"aspas\" dentro da string" "tabulador:\tou\^iou\9." 18/104

19 Strings (cont.) Códigos de escape de 1 caracter: Escape Unicode Character \0 U+0000 null character \a U+0007 alert \b U+0008 backspace \f U+000C form feed \n U+000A newline (line feed) \r U+000D carriage return \t U+0009 horizontal tab \v U+000B vertical tab \" U+0022 double quote \& n/a no character \ U+0027 single quote \\ U+005C backslash 19/104

20 Strings (cont.) Códigos de controle: Escape Escape Unicode Meaning \NUL U+0000 null character \SOH \^A U+0001 start of heading \STX \^B U+0002 start of text \ETX \^C U+0003 end of text \EOT \^D U+0004 end of transmission \ENQ \^E U+0005 enquiry \ACK \^F U+0006 acknowledge \BEL \^G U+0007 bell \BS \^H U+0008 backspace \HT \^I U+0009 horizontal tab \LF \^J U+000A line feed (newline) \VT \^K U+000B vertical tab \FF \^L U+000C form feed \CR \^M U+000D carriage return 20/104

21 Strings (cont.) \SO \^N U+000E shift out \SI \^O U+000F shift in \DLE \^P U+0010 data link escape \DC1 \^Q U+0011 device control 1 \DC2 \^R U+0012 device control 2 \DC3 \^S U+0013 device control 3 \DC4 \^T U+0014 device control 4 \NAK \^U U+0015 negative acknowledge \SYN \^V U+0016 synchronous idle \ETB \^W U+0017 end of transmission block \CAN \^X U+0018 cancel \EM \^Y U+0019 end of medium \SUB \^Z U+001A substitute \ESC \^[ U+001B escape \FS \^\ U+001C file separator \GS \^] U+001D group separator \RS \^^ U+001E record separator 21/104

22 Strings (cont.) \US \^_ U+001F unit separator \SP U+0020 space \DEL U+007F delete 22/104

23 Strings (cont.) Códigos de escape numéricos: \decimal código decimal \o octal código octal \x hexa código hexadecimal Exemplos: \1234 \xbeef \o1234 O valor numérico máximo é \ , que também pode ser escrito \x10ffff ou \o /104

24 Strings (cont.) Seqüência de escape vazia: \& Literais string podem conter a seqüência de esccape vazia, escrita \&. Ela não é um caracter real, mas serve para separar uma seqüência de escape numérica de um dígito decimal que vem logo em seguida. Exemplo: A string "\130\&12" é formada pelos caracteres \130, 1 e 2. Já a string "\13012" é formada apenas pelo caracter \ /104

25 Strings (cont.) Seqüência de escape gap: \brancos\ Esta seqüência pode aparecer em literais strings. É formada por uma seqüência de caracteres brancos (espaços, mudanças de linha, tabulações,...) delimitada pelo caracter \. Ela não reprsenta nenhum caracter e é ignorada. É útil para escrever um literal string em várias linhas. Exemplo: A string "uma longa \ \string, escrita\ \ em muitas linhas" é a idêntica a "uma longa string, escrita em muitas linhas" 25/104

26 Instância de classes Tipos listas são instâncias de várias classes: instance Eq a => Eq [a] instance Ord a => Ord [a] instance Read a => Read [a] instance Show a => Show [a] Duas listas são iguais se e somente se os seus elementos correspondentes são iguais. A comparação de listas é lexicográfica (da mesma maneira que palavras são organizadas em um dicionário). 26/104

27 Instância de classes (cont.) Exemplos: [1,2,3,4,5] == [1,2,3,4,5] True [1,2] == [1,2,3] False "Maria" /= "maria" True "elegante" <= "elefante" False [1,2,3] > [1,2] True compare "Abracadabra" "Zebra" LT show [1,2,3,4] "[1,2,3,4]" show "Bom dia!" "\"Bom dia!\"" read "[6,0,32]" :: [Int] [6,0,32] read "[ f, i, m ]" :: String "fim" read "\"fim\"" :: String "fim" 27/104

28 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 28/104

29 Seqüências aritméticas Haskell tem uma sintaxe especial para seqüências aritméticas. 29/104

30 Seqüências aritméticas (cont.) [ exp 1, exp 2.. exp 3 ] É a seqüência aritmética que começa com exp 1, continua com exp 2 e cujos elementos não ultrapassam exp 3. Para tipos numéricos, a razão da progressão é exp 2 exp 1. Exemplos: [4,6..14] [4,6,8,10,12,14] [5,10..44] [5,10,15,20,25,30,35,40] [18,15..0] [18,15,12,9,6,3,0] [4.0, ] [4.0,4.4, , ] [ m, o.. x ] "moqsuw" [ 0, ] "02468" [ m, o.. a ] "" 30/104

31 Seqüências aritméticas (cont.) [ exp 1.. exp 2 ] É a seqüência aritmética que começa com exp 1 e cujos elementos não ultrapassam exp 2. Para tipos numéricos, a razão da progressão é 1. Exemplos: [5..10] [5,6,7,8,9,10] [7..19] [7,8,9,10,11,12,13,14,15,16,17,18,19] [7..5] [] [ M.. P ] "MNOP" [False.. True] [False,True] 31/104

32 Seqüências aritméticas (cont.) [ exp 1, exp 2.. ] É a seqüência aritmética que começa com exp 1 e cujo segundo elemento é exp 2. Para tipos numéricos, a razão da progressão é exp 2 exp 1. Pode ser infinita. Exemplos: [5,7..] [5,7,9,11,13,15,17,... (seqüência infinita) [0,6..] [0,6,12,18,24,30,36,... (seqüência infinita) [7,2..] [7,2,-3,-8,-13,-18,... (seqüência infinita) [9,9..] [9,9,9,9,9,9,9,9,9,... (seqüência infinita) 32/104

33 Seqüências aritméticas (cont.) [ exp 1.. ] É a seqüência aritmética que começa com exp 1. Para tipos numéricos, a razão da progressão é 1. Pode ser infinita. Exemplos: [5..] [5,6,7,8,9,10,11,12,13,... (seqüência infinita) [3..] [3,4,5,6,7,8,9,10,11,12,... (seqüência infinita) [1.1..] [1.1,2.1,3.1,4.1,5.1,6.1,... (seqüência infinita) [LT..] [LT,EQ,GT] [5..] :: (Enum a, Num a) => [a] [ B..] :: [Char] 33/104

34 Seqüências aritméticas (cont.) A notação de lista para seqüências aritméticas é simplesmente uma abreviação sintática para aplicações de métodos da classe Enum: [ a, b.. c ] enumfromthento a b c [ a.. b ] enumfromto a b [ a, b.. ] enumfromthen a b [ a.. ] enumfrom a Exemplo: [10,15..44] [10,15,20,25,30,35,40] enumfromthento [10,15,20,25,30,35,40] Portanto seqüências aritméticas só podem ser usadas para listas de elementos de um tipo que seja instância da classe Enum. 34/104

35 Seqüências aritméticas (cont.) A classe Enum: class Enum a where succ pred toenum fromenum enumfrom enumfromthen enumfromto :: a -> a :: a -> a :: Int -> a :: a -> Int :: a -> [a] :: a -> a -> [a] :: a -> a -> [a] enumfromthento :: a -> a -> a -> [a] instance Enum Int instance Enum Integer instance Enum Float instance Enum Double instance Enum Char instance Enum Bool instance Enum Ordering instance Enum () 35/104

36 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 36/104

37 Casamento de padrão com listas Casamento de padrão é a operação básica de Haskell para decompor valores estruturados. Para cada construtor de dados existe uma forma de padrão correspondente. 37/104

38 Casamento de padrão com listas (cont.) Estruturalmente uma lista pode ser vazia ou não vazia: padrão lista vazia [] é um padrão constante o casamento sucede se e somente se o valor for a lista vazia padrão lista não vazia pad 1 : pad 2 é formado por dois padrões pad 1 e pad 2 o casamento sucede se e somente se o valor for uma lista não vazia cuja cabeça casa com pad 1 e cuja cauda casa com pad 2 38/104

39 Casamento de padrão com listas (cont.) Exemplo: O padrão [] casa somente com a lista vazia. padrão valor casamento variáveis [] [] sucede [] [1,2,3] falha 39/104

40 Casamento de padrão com listas (cont.) Exemplo: O padrão x:xs casa com qualquer lista não vazia, associando as variáveis x e xs com a cabeça e a cauda da lista, respectivamente. padrão valor casamento variáveis x:xs [] falha x:xs [1,2,3] sucede x 1, xs [2,3] x:xs [ A ] sucede x A, xs [] 40/104

41 Casamento de padrão com listas (cont.) Exemplo: O padrão x:y:_ casa com qualquer lista que tenha pelo menos dois elementos, associando as variáveis x e y ao primeiro e segundo elementos da lista, respectivamente. padrão valor casamento variáveis x:y:_ [] falha x:y:_ ["ana"] falha x:y:_ [1,2] sucede x 1, y 2 x:y:_ [1,2,3] sucede x 1, y 2 41/104

42 Casamento de padrão com listas (cont.) Exemplo: O padrão x:_:z:[] casa com qualquer lista que tenha exatamente três elementos, associando as variáveis x e z ao primeiro e terceiro elementos da lista, respectivamente. padrão valor casamento variáveis x:_:z:[] [] falha x:_:z:[] ["ana"] falha x:_:z:[] [1,2,3] sucede x 1, z 3 x:_:z:[] [1,2,3,4,5] falha 42/104

43 Casamento de padrão com listas (cont.) Exemplo: O padrão 0:a:_ casa com qualquer lista de números que tenha pelo menos dois elementos, sendo o primeiro igual a zero, associando a variável a ao segundo elemento da lista. padrão valor casamento variáveis 0:a:_ [] falha 0:a:_ [0] falha 0:a:_ [0,2,3] sucede a 2 0:a:_ [0,10,6,3] sucede a 10 0:a:_ [7,0,8] falha 43/104

44 Casamento de padrão com listas (cont.) Exemplo: O padrão (m,_):_ casa com qualquer lista de pares não vazia, associando a variável m ao primeiro componente do par que é o primeiro elemento da lista. padrão valor casamento variáveis (m,_):_ [] falha (m,_):_ [("fim",true)] sucede m "fim" (m,_):_ [(10, M ),(20, F )] sucede m 10 44/104

45 Casamento de padrão com listas (cont.) A forma [ padrao 1,..., padrao n ] é uma abreviação sintática para padrao 1 :... : padrao n : [] cujo casamento sucede somente se a lista tiver exatamente n elementos. 45/104

46 Casamento de padrão com listas (cont.) Exemplo: O padrão [1,alfa] casa com qualquer lista de dois números que começa com 1, associando a variável alfa ao segundo elemento da lista. padrão valor casamento variáveis [1,alfa] [] falha [1,alfa] [1] falha [1,alfa] [1,5] sucede alfa 5 [1,alfa] [9,5] falha [1,alfa] [1,2,3] falha 46/104

47 Casamento de padrão com listas (cont.) Exemplo: A expressão case tail [10] of [] -> "vazia" _ -> "nao vazia" resulta em "vazia", pois o valor da expressão tail [10] casa com o padrão para lista vazia []. 47/104

48 Casamento de padrão com listas (cont.) Exemplo: A expressão case [10,20,30,40] of [] -> "lista vazia" x:xs -> "cabeca: " ++ show x ++ " cauda: " ++ show xs resulta em "cabeca: 10 cauda: [20,30,40]", pois a lista [10,20,30,40] casa com o padrão para lista não vazia x:xs, associando x com 10 e xs com [20,30,40]. 48/104

49 Casamento de padrão com listas (cont.) Exemplo: A expressão case [10..20] of x:y:z:_ -> x + y + z _ -> 0 resulta em 33, pois a lista [10..20] casa com o padrão x:y:z:_, associando x com 10, y com 11 e z com /104

50 Casamento de padrão com listas (cont.) Exemplo: A expressão case [10,20] of x:y:z:_ -> x + y + z _ -> 0 resulta em 0, pois a lista [10,20] não casa com o primeiro padrão x:y:z:_, mas casa com o segundo _. Observe que o primeiro padrão casa somente com listas que tenham pelo menos três elementos. 50/104

51 Casamento de padrão com listas (cont.) Exemplo: A expressão case [10,20,30] of [x1,_,x3] -> x1 + x3 _ -> 0 resulta em 40, pois a lista [10,20,30] casa com o primeiro padrão [x1,_,x3]. Observe que este padrão casa somente com listas que tenham exatamente três elementos. 51/104

52 Casamento de padrão com listas (cont.) Exemplo: A expressão case [100,20,3] of a:b:xs a > b -> b:a:xs xs a = b -> a:xs -> xs resulta em [20,100,3], pois a lista [100,20,3] casa com o primeiro padrão a:b:xs e o primeiro elemento é maior do que o segundo. 52/104

53 Exercícios Exercício 2 Defina uma função usando casamento de padrão que retorna o sucessor do primeiro elemento de uma lista, se houver, e zero caso contrário. Exercício 3 Usando casamento de padrão, defina uma função que retorna a soma dos dois primeiros elementos de uma lista se a lista tiver pelo menos dois elementos, a cabeça da lista se ela contiver apenas um elemento, e zero caso contrário. Exercício 4 Resolva os exercícios 2 e 3 usando funções da biblioteca ao invés de casamento de padrão. 53/104

54 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 54/104

55 Operações com listas As listas são muito importantes na programação funcional. Serão apresentadas as operações principais com listas. 55/104

56 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 56/104

57 Operações com listas: null null retorna True se o seu argumento é a lista vazia ([]) e False caso contrário. Exemplos: null [] True null [1,2,3,4,5] False null "" True null "FIM" False null :: [a] -> Bool null [] = True null _ = False 57/104

58 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 58/104

59 Operações com listas: head head seleciona o primeiro elemento de uma lista não vazia. Exemplos: head [10,20,30,40,50] 10 head "FIM" F head [] erro head "" erro head :: [a] -> a head (x:_) = x 59/104

60 Operações com listas: tail tail seleciona a cauda de uma lista não vazia, isto é, todos os elementos exceto o primeiro. Exemplos: tail [10,20,30,40,50] [20,30,40,50] tail "Aroma" "roma" tail [] erro tail "" erro tail :: [a] -> a tail (_:xs) = xs 60/104

61 Operações com listas: init init seleciona todos os elementos de uma lista não vazia, exceto o último elemento. Exemplos: init [15] [] init [True,False] [True] init [1,2,3,4,5] [1,2,3,4] init "Brasil" "Brasi" init [] erro init :: [a] -> [a] init [_] = [] init (x:xs) = x : init xs 61/104

62 Operações com listas: last last seleciona o último elemento de uma lista não vazia. Exemplos: last [15] 15 last [True,False] False last [1,2,3,4,5] 5 last "Brasil" l last [] erro last :: [a] -> a last [x] = x last (_:xs) = last xs 62/104

63 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 63/104

64 Operações com listas: elem elem recebe um valor e uma lista e retorna True se e somente se o valor é um elemento da lista. Exemplos: elem 5 [] False elem 5 [5] True elem 5 [4,5] True elem d "Pedro" True 8 elem [2,4,6,8,10] True # elem "Pedro" False infixl 4 elem elem :: Eq a => a -> [a] -> Bool elem _ [] = False elem x (y:ys) = x == y elem x ys 64/104

65 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 65/104

66 Operações com listas: length length retorna o número de elementos de uma lista finita. Exemplos: length [] 0 length [15] 1 length [div 2 0, mod 3 0] 2 length [1,2,3,4,5] 5 length "Brasil" 6 length :: [a] -> Int length [] = 0 length (_:xs) = 1 + length xs 66/104

67 Operações com listas: (!!) (!!) recebe uma lista e um número inteiro e retorna o elemento da lista cuja posição é dada pelo número. A posição do primeiro elemento é zero. A posição do último elemento é o tamanho da lista menos um. Se a posição for inválida ocorre um erro. Exemplos: [1,2,3,4,5]!! 0 1 [1,2,3,4,5]!! 1 2 "Brasil"!! 3 s [35,46]!! 8 erro [35,46]!! (-2) erro infixl 9!! (!!) :: [a] -> Int -> a (x:_)!! 0 = x (_:xs)!! n = xs!! (n-1) 67/104

68 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 68/104

69 Operações com listas: take take recebe um número inteiro n e uma lista xs e retorna o prefixo de tamanho n da lista xs. Exemplos: take take 5 "Hello World!" "Hello" take 3 [1,2,3,4,5] [1,2,3] take 3 [1,2] [1,2] take 3 [] [] take (-9) [1,2] [] take 0 [1,2] [] take n _ n <= 0 = [] take _ [] = [] take n (x:xs) :: Int -> [a] -> [a] = x : take (n-1) xs 69/104

70 Operações com listas: drop drop recebe um número inteiro n e uma lista xs e retorna o sufixo da lista xs após os n primeiros elementos. Exemplos: drop drop 6 "Hello World!" "World!" drop 3 [1,2,3,4,5] [4,5] drop 3 [1,2] [] drop 3 [] [] drop (-9) [1,2] [1,2] drop 0 [1,2] [1,2] drop n xs n <= 0 = xs drop _ [] = [] drop n (_:xs) :: Int -> [a] -> [a] = drop (n-1) xs 70/104

71 Operações com listas: splitat splitat recebe um número inteiro n e uma lista xs e retorna um par onde o primeiro elemento é um prefixo de tamanho n de xs e o segundo elemento é o resto da lista. Exemplos: splitat 6 "Hello World!" ("Hello ","World!") splitat 3 [1,2,3,4,5] ([1,2,3],[4,5]) splitat 1 [1,2,3] ([1],[2,3]) splitat 3 [1,2,3] ([1,2,3],[]) splitat 4 [1,2,3] ([1,2,3],[]) splitat 0 [1,2,3] ([],[1,2,3]) splitat (-9) [1,2,3] ([],[1,2,3]) 71/104

72 Operações com listas: splitat (cont.) splitat :: Int -> [a] -> ([a],[a]) splitat n xs n <= 0 = ([],xs) splitat _ [] = ([],[]) splitat n (x:xs) = (x:xs,xs ) where (xs,xs ) = splitat (n-1) xs 72/104

73 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 73/104

74 Operações com listas: (++) (++) concatena duas listas. Exemplos: [] ++ [20,10] [20,10] [4] ++ [20,10] [4,20,10] [1,2,3,4,5] ++ [20,10] [1,2,3,4,5,20,10] "ana" ++ " carolina" "ana carolina" [(10,True),(5,False)] ++ [] [(10,True),(5,False)] [1,2] ++ [] ++ [1] ++ [0,3] [1,2,1,0,3] infixr 5 ++ (++) :: [a] -> [a] -> [a] [] ++ ys = ys (x:xs) ++ ys = x : (xs ++ ys) 74/104

75 Operações com listas: concat concat aplicada a uma lista de listas, concatena as listas em uma única lista Exemplos: concat [] [] concat [[1,2,3]] [1,2,3] concat [[1,2,3], [4]] [1,2,3,4] concat [[1,2,3], [4], [], [5,6,7,8]] [1,2,3,4,5,6,7,8] concat ["we"," ","like"," ","lists"] "we like lists" concat :: [[a]] -> [a] concat [] = [] concat (xs:xss) = xs ++ concat xss 75/104

76 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 76/104

77 Operações com listas: reverse reverse recebe uma lista finita e retorna uma lista com os mesmos elementos, porém em ordem reversa. Exemplos: reverse reverse [] [] reverse [1] [1] reverse [1,2] [2,1] reverse [1,2,3] [3,2,1] reverse [1,2,3,4,5] [5,4,3,2,1] reverse "ROMA" "AMOR" reverse [] = [] :: [a] -> [a] reverse (x:xs) = reverse xs ++ [x] 77/104

78 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 78/104

79 Operações com listas: zip zip recebe duas listas e retorna a lista dos pares formados pelos elementos correspondentes da primeira e da segunda lista. Se as listas forem de tamanhos diferentes, o tamanho do resultado é o menor tamanho. Exemplos: zip [] [] [] zip [1,2,3] [] [] zip [] [1,2,3] [] zip [True] [1] [(True,1)] zip [1,2] ["ana","pedro"] [(1,"ana"),(2,"pedro")] zip [1,2,3] "ABC" [(1, A ),(2, B ),(3, C )] zip [1,2,3,4,5] [0.5,0.6] [(1,0.5),(2,0.6)] zip [1,2,3] "BRASIL" [(1, B ),(2, R ),(3, A )] zip :: [a] -> [b] -> [(a, b)] zip (x:xs) (y:ys) = (x,y) : zip xs ys zip = [] 79/104

80 Operações com listas: zipwith zipwith recebe uma função binária e duas listas e retorna a lista formada pelos resultados da aplicação da função aos elementos correspondentes da listas dadas. Se as listas forem de tamanhos diferentes, o tamanho do resultado é o menor tamanho. Exemplos: zipwith zipwith (+) [] [] [] zipwith (+) [1,2,3,4,5] [3,3,4,1,5] [4,5,7,5,10] zipwith (++) ["AB","cde"] ["?","123"] ["AB?","cd123"] zipwith (^) [5,6,7,8] [2,3,4,5] [25,216,2401,32768] zipwith (*) [5,6,7,8] [2,3] [10,18] :: (a -> b -> c) -> [a] -> [b] -> [c] zipwith f (x:xs) (y:ys) = f x y : zipwith f xs ys zipwith _ = [] 80/104

81 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 81/104

82 Operações com listas: map map recebe uma função e uma lista e retorna a lista formada pela aplicação da função em cada elemento da lista dada. Exemplos: map map sqrt [0,1,4,9] [0.0,1.0,2.0,3.0] map succ "HAL" "IBM" map head ["bom","dia","turma"] "bdt" map (<3) [1,2,3] [True,True,False] map (+2) [2,5,6,0] [4,7,8,2] map (\x -> 2*x+1) [2,5,6,0] [5,11,13,1] map _ [] = [] :: (a -> b) -> [a] -> [b] map f (x:xs) = f x : map f xs 82/104

83 Operações com listas: filter filter recebe uma função f e uma lista xs e retorna a lista formada pelos elementos de xs para os quais a função f retorna True. Exemplos: filter filter even [0,1,4,9,10,11,15] [0,4,10] filter (<10) [0,1,4,9,10,11,15] [0,1,4,9] filter (not. null) ["abc","","d"] ["abc","d"] filter _ [] = [] filter f (x:xs) :: (a -> Bool) -> [a] -> [a] f x = x : filter f xs otherwise = filter f xs 83/104

84 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 84/104

85 Operações com listas: foldl foldl reduz uma lista, usando uma função binária e um valor inicial, de forma associativa à esquerda. foldl ( ) e [x 0,x 1,...,x n 1 ] (...((e x 0 ) x 1 )...) x n 1 Exemplos: foldl (+) 0 [] 0 foldl (+) 0 [1] 1 foldl (+) 0 [1,2] 3 foldl (+) 0 [1,2,4] 7 foldl (*) 1 [5,2,4,10] 400 foldl (&&) True [2>0,even 6,odd 5,null []] True foldl ( ) False [2>3,even 6,odd 5,null []] True foldl (\a x -> 2*a+x) 0 [1,2,3,4,5] 57 85/104

86 Operações com listas: foldl (cont.) foldl :: (a -> b -> a) -> a -> [b] -> a foldl f z [] = z foldl f z (x:xs) = foldl f (f z x) xs 86/104

87 Operações com listas: foldr foldr reduz uma lista, usando uma função binária e um valor inicial, de forma associativa à direita. foldr ( ) e [x 0,...,x n 2,x n 1 ] x 0 (... (x n 2 (x n 1 e))...) Exemplos: foldr (+) 0 [] 0 foldr (+) 0 [1] 1 foldr (+) 0 [1,2] 3 foldr (+) 0 [1,2,4] 7 foldr (*) 1 [5,2,4,10] 400 foldr (&&) True [2>0,even 6,odd 5,null []] True foldr ( ) False [2>3,even 6,odd 5,null []] True foldr (\x a -> 2*a+x) 0 [1,2,3,4,5] /104

88 Operações com listas: foldr (cont.) foldr :: (a -> b -> b) -> b -> [a] -> b foldr f z [] = z foldr f z (x:xs) = f x (foldr f z xs) 88/104

89 Operações com listas: foldl1 foldl1 reduz uma lista não vazia usando uma função binária, de forma associativa à esquerda. foldl1 é uma variante de foldl que não tem valor inicial, e portanto deve ser aplicada a listas não-vazias. Exemplos: foldl1 foldl1 (+) [] erro foldl1 (+) [1] 1 foldl1 (+) [1,2,4] 7 foldl1 (*) [5,2,4,10] 400 foldl1 (&&) [2>0,even 6,odd 5,null []] True foldl1 max [1,8,6,10,-48,5] 10 :: (a -> a -> a) -> [a] -> a foldl1 f (x:xs) = foldl f x xs 89/104

90 Operações com listas: foldr1 foldr1 reduz uma lista não vazia usando uma função binária, de forma associativa à esquerda. foldr1 é uma variante de foldr que não tem valor inicial, e portanto deve ser aplicada a listas não-vazias. Exemplos: foldr1 foldr1 (+) [] erro foldr1 (+) [1] 1 foldr1 (+) [1,2,4] 7 foldr1 (*) [5,2,4,10] 400 foldr1 (&&) [2>0,even 6,odd 5,null []] True foldr1 max [1,8,6,10,-48,5] 10 foldr1 _ [x] :: (a -> a -> a) -> [a] -> a = x foldr1 f (x:xs) = f x (foldr1 f xs) 90/104

91 Exercícios Exercício 5 Defina a função recursiva product :: Num a => [a] -> a que retorna o produto de uma lista de números. Exercício 6 Defina as funções recursivas and :: [Bool] -> Bool or :: [Bool] -> Bool que retornam respectivamente a conjunção e a disjunção de uma lista de valoresl lógicos. 91/104

92 Layout 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com listas 5 Operações com listas null head e tail, init e last elem length e (!!) take, drop e splitat (++) e concat reverse zip e zipwith map e filter foldl e foldr, foldl1 e foldr1 6 List comprehension 92/104

93 List comprehension Em Matemática, a notação de compreensão pode ser usada para construir novos conjuntos a partir de conjuntos já conhecidos. Exemplo: {x 2 x [1...5]} é o conjunto {1,4,9,16,25} de todos os números x 2 tal que x é um elemento do conjunto {1,2,3,4,5}. 93/104

94 List comprehension (cont.) Em Haskell também há uma notação de compreensão similar que pode ser usada para construir novas listas a partir de listas conhecidas. Exemplo: [ x^2 x <- [1..5] ] é a lista [1,4,9,16,25] de tdos os números x^2 tal que x é um elmento da lista [1,2,3,4,5]. 94/104

95 List comprehension (cont.) A expressão x <- [1..5] é chamada gerador, já que ela informa como gerar valores para a variável x. Compreensões podem ter múltiplos geradores, separados por vírgula. Exemplo: [(x,y) x <- [1,2,3], y <- [4,5]] [(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)] 95/104

96 List comprehension (cont.) Se a ordem dos geradores for trocada, a ordem dos elementos na lista resultante também é trocada. Exemplo: [(x,y) y <- [4,5], x <- [1,2,3]] [(1,4),(2,4),(3,4),(1,5),(2,5),(3,5)] 96/104

97 List comprehension (cont.) Geradores múltiplos são semelhantes a loops aninhados: os últimos geradores são como loops mais profundamente aninhados cujas variáveis mudam mais freqüentemente. Exemplo: [(x,y) y <- [4,5], x <- [1,2,3]] [(1,4),(2,4),(3,4),(1,5),(2,5),(3,5)] Como x <- [1,2,3] é o último gerador, o valor do componente x de cada par muda mais frequentemente. 97/104

98 List comprehension (cont.) Geradores posteriores podem depender de variáveis introduzidas em geradores anteriores. Exemplo: [(x,y) x <- [1..3], y <- [x..3]] [(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)] a lista [(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)] de todos os pares de números (x,y) tal que x e y são elementos da lista [1..3] e y >= x. 98/104

99 List comprehension (cont.) Exemplo: Usando geradores dependentes pode-se definir a função que concatena uma lista de listas: concat :: [[a]] -> [a] concat xss = [x xs <- xss, x <- xs] concat [[1,2,3],[4,5],[6]] [1,2,3,4,5,6] 99/104

100 List comprehension (cont.) List comprehensions podem usar guardas para restringir os valores produzidos por geradores anteriores. Exemplo: [x x <- [1..10], even x] [2,4,6,8,10] a lista de todos os números x tal que x é um elemento da lista [1..10] e x é par. 100/104

101 List comprehension (cont.) Exemplo: Usando uma guarda podemos definir uma função que mapeia um número inteiro positivo à sua lista de fatores: factors :: Int -> [Int] factors n = [x x <- [1..n], n mod x == 0] Exemplos de aplicação da função: factors 15 [1,3,5,15] factors 120 [1,2,3,4,5,6,8,10,12,15,20,24,30,40,60,120] 101/104

102 List comprehension (cont.) Exemplo: Um número inteiro positivo é primo se seus únicos fatores são 1 e ele próprio. Assim, usando fatores que podemos definir uma função que decide se um número é primo: prime :: Int -> Bool prime n = factors n == [1,n] Exemplos de aplicação da função: prime 15 False prime 7 True 102/104

103 List comprehension (cont.) Exemplo: Usando um guarda agora podemos definir uma função que retorna a lista de todos os números primos até um determinado limite: primes :: Int -> [Int] primes n = [x x <- [2..n], prime x] Exemplos de aplicação da função: primes 40 [2,3,5,7,11,13,17,19,23,29,31,37] primes 12 [2,3,5,7,11] 103/104

104 Fim 104/104

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

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

Programação Funcional. Capítulo 9. Listas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012. Programação Funcional Capítulo 9 Listas José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/100 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão

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

Representação de Dados e Sistemas de Numeração

Representação de Dados e Sistemas de Numeração 1 Representação de Dados e Sistemas de Numeração Sistema de numeração decimal e números decimais (base 10) Sistema de numeração binário e números binários (base 2) Conversão entre binário e decimal Sistema

Leia mais

Compilação da linguagem Panda

Compilação da linguagem Panda Construção de Compiladores I [BCC328] Atividades Práticas Compilação da linguagem Panda Departamento de Computação Universidade Federal de Ouro Preto Prof. José Romildo Malaquias 22 de abril de 2015 Resumo

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

Introdução à Informática

Introdução à Informática Introdução à Informática Sistemas Numéricos e Armazenamento de dados Escola Superior de Tecnologia e Gestão Instituto Politécnico de Bragança Outubro de 2006 Sistema de base dez O sistema de numeração

Leia mais

CODIFICADORES / DECODIFICADORES

CODIFICADORES / DECODIFICADORES CODIFICADORES / DECODIFICADORES Uma grande parte dos sistemas digitais trabalha com os níveis lógicos (bits) representando informações que são codificadas em bits. Exemplo: computador trabalha com informações

Leia mais

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

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

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

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

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

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

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

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

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

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

CÓDIGOS Código BCD 8421

CÓDIGOS Código BCD 8421 CÓDIGOS Uma grande parte dos sistemas digitais trabalha com os níveis lógicos (bits) representando informações que são codificadas em bits. Exemplo: computador trabalha com informações alfanuméricas; a

Leia mais

ANEXO A. Prof. Erico Lisboa 53 http://www.ericolisboa.eng.br

ANEXO A. Prof. Erico Lisboa 53 http://www.ericolisboa.eng.br ANEXO A TABELA ASCII A As tabelas mostradas neste apêndice representam os 256 códigos usados nos computadores da família IBM. Esta tabela refere-se ao American Standard Code for Information Interchange

Leia mais

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 8 - Antes de começar o estudo sobre decodificadores, o que é bastante semelhante ao que já vimos anteriormente é necessário relembrarmos alguns conceitos sobre códigos binários. 1. Códigos Binários

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

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

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

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

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

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

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

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

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

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

Aula de hoje. Códigos numéricos. Códigos binários. Armazenamento de dados. Armazenamento de dados. Armazenamento de dados

Aula de hoje. Códigos numéricos. Códigos binários. Armazenamento de dados. Armazenamento de dados. Armazenamento de dados SCC 24 - Introdução à Programação para Engenharias Aula de hoje Códigos numéricos Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior Programação Funcional 7 a Aula Funções de ordem superior Pedro Vasconcelos DCC/FCUP 2013 Funções de ordem superior Uma função é de ordem superior se tem um argumento que é uma função ou um resultado que

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

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

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

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. 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

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

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

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

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. 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

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. 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

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

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. 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

004 CTRL-D 036 $ 068 D 100 da. 017 CTRL-Q 049 1 081 Q 113 qopn

004 CTRL-D 036 $ 068 D 100 da. 017 CTRL-Q 049 1 081 Q 113 qopn :: InfoIsis - +qisis - Textos - DOS - 1 :: Home Page Uma abordagem Mais Ferramentas a Conjuntos Que Isis de Textos Caracteres Bases De DOS Dados ASCII no DOSProposta http://www.infoisis.eti.br/mqisi/tex/dos/pgtxdos001.htm

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

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

Linguagens de Programação. Programação Funcional. Carlos Bazilio

Linguagens de Programação. Programação Funcional. Carlos Bazilio Linguagens de Programação Programação Funcional Carlos Bazilio carlosbazilio@puro.uff.br http://www.ic.uff.br/~bazilio/cursos/lp Funções como Valores de 1a. Classe Atribuição a Variáveis a = f() g = f

Leia mais

SEBENTA INTRODUÇÃO Á ALGORITMIA

SEBENTA INTRODUÇÃO Á ALGORITMIA SEBENTA INTRODUÇÃO Á ALGORITMIA O desenvolvimento de programas para computador está sempre baseado na tarefa de programar um computador para seja resolvido um problema ou executada uma função e assim dar

Leia mais

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00 Fundamentos da Programação 32 A. Conceito Variáveis contém dados: VIII. VARIÁVEIS de entrada que o computador precisa manipular; de saída que o computador precisa imprimir; e temporários, utilizados de

Leia mais

Circuitos Digitais I. Notas de Aula. Sistemas de Representação. Bases e Códigos. Bases

Circuitos Digitais I. Notas de Aula. Sistemas de Representação. Bases e Códigos. Bases Sistemas numéricos Sistemas numéricos 2 Bases Circuitos Digitais I É importante representar valores das informações que desejamos processar; Por exemplo, num sinal amostrado, converter uma amplitude em

Leia mais

Retôrno ao Padrão de Fabrica (Restore Default ) Habilitação do Buzzer. Saída da Habilitação sem Salvar. Configuração Através RS232

Retôrno ao Padrão de Fabrica (Restore Default ) Habilitação do Buzzer. Saída da Habilitação sem Salvar. Configuração Através RS232 Sumário Retôrno ao Padrão de Fábrica (Restore Default)... 1 Saída da sem salvar... 1 Configuração através RS232... 1 Lista de... 1 do Buzzer... 2 de Leitura Redundante... 2 do Modo Scan... 3 Duração do

Leia mais

Elementos Básicos. C# - Elementos básicos. Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas

Elementos Básicos. C# - Elementos básicos. Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas C# - Elementos básicos Daniela da Cruz 2010 Elementos Básicos Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas Linguagens de Programação - Daniela

Leia mais

Sistemas Digitais Representação Digital de Informação

Sistemas Digitais Representação Digital de Informação Sistemas Digitais Representação Digital de Informação João Paulo Baptista de Carvalho (Prof. Auxiliar do IST) joao.carvalho@inesc-id.pt Representação de números em Base b Base 10: 435 10 = 4 x 100 + 3

Leia mais

Manual de Operação e Configuração

Manual de Operação e Configuração Manual de Operação e Configuração LEITOR DE CÓDIGO DE BARRAS BIVISON modelo LZ-1000 Sem fio Tecnologia ZigBee Exclusivo alcance de até 100 metros Versão 321 Dezembro de 2011 4 1 Conteúdo Pg 01 Sobre este

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

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

Sistemas Digitais Representação Digital de Informação

Sistemas Digitais Representação Digital de Informação Sistemas Digitais Representação Digital de Informação João Paulo Baptista de Carvalho joao.carvalho@inesc-id.pt Representação de números em Base b Base 10: 435 10 = 4 x 100 + 3 x 10 + 5 x 1 = 4 x 10 2

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

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

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Fabrício Olivetti de França 05 de Junho de 2018 1 Paradigmas de Programação 2 Paradigmas de Programação Haskell 3 Haskell Surgiu em 1990 com o objetivo de ser a primeira linguagem

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

Códigos, Portas Lógicas e Comportamento Elétrico

Códigos, Portas Lógicas e Comportamento Elétrico Códigos, Portas Lógicas e Comportamento Elétrico Prof. Ohara Kerusauskas Rayel Disciplina de Eletrônica Digital - ET75C Curitiba, PR 26 de março de 2015 1 / 32 Códigos Código: Números, letras ou palavras

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

SISTEMAS DIGITAIS SISTEMAS DE NUMERAÇÃO E CÓDIGOS

SISTEMAS DIGITAIS SISTEMAS DE NUMERAÇÃO E CÓDIGOS SISTEMAS DE NUMERAÇÃO E CÓDIGOS SISTEMAS DE NUMERAÇÃO E CÓDIGOS - 2 SUMÁRIO: SISTEMAS DE NUMERAÇÃO DEFINIÇÃO DE SISTEMA DE NUMERAÇÃO EQUIVALENTE DECIMAL OPERAÇÕES ARITMÉTICAS BÁSICAS MUDANÇA DE SISTEMA

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

Estrutura da Memória e do Arquivo de Imagem

Estrutura da Memória e do Arquivo de Imagem Apêndice Estrutura da Memória e do Arquivo de Imagem A memória de vídeo do MSX (VRAM) é uma memória separada da memória principal (RAM). A VRAM depende do modelo do MSX, variando de 16 Kb nos MSX 1 até

Leia mais

Representação Digital da Informação II

Representação Digital da Informação II Representação Digital da Informação II José Costa Introdução à Arquitetura de Computadores Departamento de Engenharia Informática (DEI) Instituto Superior Técnico 2014-09-24 José Costa (DEI/IST) Representação

Leia mais

Linguagens de Programação. Programação Funcional Haskell. Carlos Bazilio

Linguagens de Programação. Programação Funcional Haskell. Carlos Bazilio Linguagens de Programação Programação Funcional Haskell Carlos Bazilio carlosbazilio@id.uff.br http://www.ic.uff.br/~bazilio/cursos/lp Motivação Haskell Motivação Haskell Motivação Java 8 List pessoas

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 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

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

Circuitos Digitais I. Notas de Aula. Sistemas de Representação. Bases e Códigos. Bases. É importante representar valores das informações que desejamos

Circuitos Digitais I. Notas de Aula. Sistemas de Representação. Bases e Códigos. Bases. É importante representar valores das informações que desejamos Sistemas numéricos Sistemas numéricos 2 Bases Circuitos Digitais I Notas de Aula É importante representar valores das informações que desejamos processar; Por exemplo, num sinal amostrado, converter uma

Leia mais

INSTITUTO SUPERIOR TÉCNICO. Arquitectura de Computadores (ACom)

INSTITUTO SUPERIOR TÉCNICO. Arquitectura de Computadores (ACom) UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Departamento de Engenharia Informática Arquitectura de Computadores (ACom) LEIC-A, MEIC-A Acetatos das Aulas Teóricas Versão 1.0 - Português Aula

Leia mais

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2 Programação de Computadores II Cap. 7 Cadeias de Caracteres 1/2 Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos

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 I E N T R A DA E S A Í DA D E DA D O S

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é

Leia mais

Disciplina de Algoritmos e Programação

Disciplina de Algoritmos e Programação Disciplina de Algoritmos e Programação Aula Passada Prática com declaração e inicialização de variáveis Capacidade de representação (estouro de representação) Tamanho ocupado pela variável na memória (comando

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia Programação Funcional 14 a Aula Um verificador de tautologias Pedro Vasconcelos DCC/FCUP 2014 Proposições lógicas Uma proposição lógica é construida apartir de: constantes T, F (verdade e falsidade) variáveis

Leia mais

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período Programação I Aula 4 - Prof. Laura Silva de Assis Engenharia de Computação 2 o Período CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca UnED Petrópolis 2 o semestre - 2015 1 Sumário

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

Á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

Laboratório de Sistemas Processadores e Periféricos

Laboratório de Sistemas Processadores e Periféricos Laboratório de Sistemas Processadores e Periféricos Sistema de Interrupções do 8086 Prática 11 Gustavo G. Parma Assunto: sistema de interrupcões do 8086. Interrupções do DOS Objetivos: Apresentação do

Leia mais

SISTEMAS DIGITAIS (SD)

SISTEMAS DIGITAIS (SD) SISTEMAS DIGITAIS (SD) MEEC Acetatos das Aulas Teóricas Versão 3.0 - Português Aula N o 02: Título: Sumário: Sistemas de Numeração e Códigos Sistemas de numeração (base 10, base 2, base 8 e 16). Operações

Leia mais

Puca Huachi Vaz Penna

Puca Huachi Vaz Penna Aula 3 C++: variáveis e expressões aritméticas 2017/1 BCC201 Introdução à Computação Turmas 61, 62, 63, 64, 65 e 66, 32 e 33 Puca Huachi Vaz Penna Departamento de Computação Universidade Federal de Ouro

Leia mais

Sistemas Digitais (SD) Sistemas de Numeração e Códigos

Sistemas Digitais (SD) Sistemas de Numeração e Códigos Sistemas Digitais (SD) Sistemas de Numeração e Códigos Aula Anterior Na aula anterior: Motivação: O que é um Sistema Digital? Onde estão os Circuitos Digitais? Perspectiva histórica: o Dos primórdios da

Leia mais

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

Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves Linguagens de Programação Programação Funcional e Haskell Programação Interativa Thiago Alves 1 Introdução Vimos como Haskell pode ser usado para escrever programas batch que recebem todas suas entradas

Leia mais

Mestr. Integr. Engª. Informática

Mestr. Integr. Engª. Informática Sistemas de Computação Mestr. Integr. Engª. Informática 1º ano 2015/16 Equipa docente: Alberto Proença, Luís Paulo Santos, João Luís Sobral, André Pereira AJProença, Sistemas de Computação, UMinho, 2015/16

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

Algoritmos e Estrutura de Dados Aula 04 Strings em Python parte 1

Algoritmos e Estrutura de Dados Aula 04 Strings em Python parte 1 Algoritmos e Estrutura de Dados Aula 04 Strings em Python parte 1 Profa. Alana Oliveira e Prof. Davi Viana alanaslz@gmail.com e davi.viana@lsdi.ufma.br Se não entender, pergunte 2 1 Slides adaptados de:

Leia mais

Lic. Engenharia Informática

Lic. Engenharia Informática Sistemas de Computação Introdução aos Sistemas de Computação (1) Lic. Engenharia Informática 1º ano 2009/10 A.J.Proença Tema Introdução aos Sistemas de Computação Estrutura do tema ISC 1. Representação

Leia mais