Programação Funcional. Aula 6. Listas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.
|
|
- Edison Sabala Franca
- 5 Há anos
- Visualizações:
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
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 maisProgramaçã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 maisFunçõ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 maisRepresentaçã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 maisCompilaçã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 maisListas 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 maisIntroduçã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 maisCODIFICADORES / 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 maisProgramaçã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 maisProgramaçã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 maisProgramaçã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 maisAula 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 maisLayout. 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 maisProgramaçã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 maisExpressõ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 maisProgramaçã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 maisPedro 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 maisProgramaçã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 maisCÓ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 maisANEXO 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 maisSISTEMAS 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 maisConceitos 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 maisLinguagens 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 maisProgramaçã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 maisTipos 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 maisPedro 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 maisTipos 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 maisProgramaçã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 maisPedro 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 maisProgramaçã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 maisLayout. 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 maisAula 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 maisParadigmas 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 maisPedro 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 maisExpressõ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 maisClasses 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 maisExpressõ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 maisProgramaçã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 maisProgramaçã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 maisProgramaçã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 maisCasamento 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 maisCasamento 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 maisPedro 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 maisProgramaçã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 maisPedro 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 maisProgramaçã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 maisLinguagem 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 maisLinguagem 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 maisProgramaçã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 mais004 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 maisProgramaçã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 maisPedro 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 maisLinguagens 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 maisSEBENTA 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 maisVIII. 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 maisCircuitos 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 maisRetô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 maisElementos 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 maisSistemas 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 maisManual 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 maisLinguagens 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 maisConceito 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 maisSistemas 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 mais4.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 maisExpressã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 maisParadigmas 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 maisAlgoritmos 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 maisCó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 maisPedro 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 maisSISTEMAS 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 mais3. 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 maisEstrutura 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 maisRepresentaçã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 maisLinguagens 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 maisProgramaçã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 maisAula 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 maisEstruturas 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 maisCircuitos 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 maisINSTITUTO 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 maisProgramaçã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 maisTipos 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 maisPROGRAMAÇÃ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 maisDisciplina 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 maisProgramaçã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 maisPedro 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 maisAula 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 maisAula 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
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 maisLaborató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 maisSISTEMAS 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 maisPuca 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 maisSistemas 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 maisLinguagens 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 maisMestr. 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 maisAula 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 maisAlgoritmos 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 maisLic. 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