Resolução lista2

13

Click here to load reader

Transcript of Resolução lista2

Page 1: Resolução lista2

Programação Funcional em HaskellResolução Lista 2

Page 2: Resolução lista2

Um pouco sobre Dobras

Função foldl, também chamada de "left fold" (dobra esquerda), dobra a lista a partir do lado esquerdo.

A função foldr dobra a lista a partir do lado direito

As funções foldl1 e foldr1 funcionam da mesma forma que foldl e foldr, só que você não precisa informar explicitamente qual o valor inicial.

Ele assume que o primeiro (ou último) elemento da lista é o valor inicial da dobra e então inicia a dobra com ele.

Page 3: Resolução lista2

Dobras em Haskellfoldr (+) 0 [1..10] valor inicial 0, 0 + 10 + ... 1

foldl (+) 0 [1..10] valor inicial 0, 0 + 0 + ... 10

foldr1 (+) [1..10] valor inical 10,10 + 9 + ... 1

foldl1 (+) [1..10] valor inical 1, 1 + 2 + ... 10

Page 4: Resolução lista2

Dobras em HaskellPrelude> putStrLn $ foldr (\x y -> concat ["(",x,"+",y,")"]) "0" (map show [1..13])(1+(2+(3+(4+(5+(6+(7+(8+(9+(10+(11+(12+(13+0)))))))))))))

Prelude> putStrLn $ foldl (\x y -> concat ["(",x,"+",y,")"]) "0" (map show [1..13])(((((((((((((0+1)+2)+3)+4)+5)+6)+7)+8)+9)+10)+11)+12)+13)

Prelude> putStrLn $ foldr1 (\x y -> concat ["(",x,"+",y,")"]) (map show [1..13])(1+(2+(3+(4+(5+(6+(7+(8+(9+(10+(11+(12+13))))))))))))

Prelude> putStrLn $ foldl1 (\x y -> concat ["(",x,"+",y,")"]) (map show [1..13])((((((((((((1+2)+3)+4)+5)+6)+7)+8)+9)+10)+11)+12)+13)

Page 5: Resolução lista2

Dobras em HaskellPrelude> foldr (\x y->x:'.':y) "" []:"CRIS":[]["",“CRIS"]

Prelude> foldr (\x y->x:'.':y) "" "CRIS":[][“C.R.I.S."]

Prelude> foldr (\x y->x:'.':y) "" "CRIS"“C.R.I.S."

Prelude> foldr (\x y->x:'.':y) "" [‘c']:“CRIS":[]["a.",“CRIS"]

Page 6: Resolução lista2

1° QUESTÃO--1° NIVEL 3Prelude> length (filter (/='a') "banana")3Prelude> length (filter (/='n') "banana")4Prelude> length ([1,2]:[3,4]:[])2Prelude> length [1,3..7]4Prelude> length (drop 6 "abcdefg123")4Prelude> length ([1,2]:[3]:[])2Prelude> length [(x,y)| x<-"abc", y<-[0,1,2]]9

Page 7: Resolução lista2

1° QUESTÃO--1° NIVEL 3Prelude> head [n | n<-[1..], n*n>15]44Prelude> head [n | n<-[1..], n*n>20]5Prelude> head([]++[1,2]++[3])1Prelude> [x | x<- "ab", n<-[1,2,3]]"aaabbb"Prelude> map (`div` 2) [1,2,3][0,1,1]Prelude> (reverse [3,2])++ [4,5][2,3,4,5]Prelude> reverse ([4,5]++[1,2,3])[3,2,1,5,4]

Page 8: Resolução lista2

1° QUESTÃO--1° NIVEL 3Prelude> :t ([1,2,3], "banana")

([1,2,3], "banana") :: Num t => ([t], [Char])

Prelude> :t [(1,"banana"), (2,"maçã")]

[(1,"banana"), (2,"maçã")] :: Num t => [(t, [Char])]

Page 9: Resolução lista2

2° QUESTÃO--2° NIVEL 5Prelude> foldr (-) (-2) [1,2,3,4]-4

Prelude> foldr (-) (2) [1,2,3,4]0

Prelude> foldl (-) (2) [1,2,3,4]-8

Prelude> foldl (-) (-2) [1,2,3,4]-12

Page 10: Resolução lista2

3° QUESTÃO--3° NIVEL 6Prelude> foldr (+) 2 (map (+1) [1,2,3])11

Prelude> foldl (+) 2 (map (+1) [1,2,3])11

Prelude> foldr (-) 2 (map ((-)1) [1,2,2])-2

Prelude> foldl (-) 2 (map ((-)1) [1,2,2])4Prelude> foldr(\x y->x:'.':y) "" "PAULO""P.A.U.L.O.“Prelude> foldl(\x y->x:'.':y) "" "ITALOS"--ERRO

Page 11: Resolução lista2

4° QUESTÃO--4° NIVEL 7Prelude> foldl (+) 0 (filter (>1) [sum(map ((-)1) [1,2,2])])0

Prelude> sum(map (-1) [1,2,2])--ERRO

Prelude> [map (>2) [1,2,3]] ++ ([]) ++ [[True]][[False,False,True],[True]]

Prelude> [map (>2) [1,6,6]] ++ ([]) ++ [[]][[False,True,True],[]]

Prelude> [map (>2) [-1, 2,4]] ++([])[[False,False,True]]

Page 12: Resolução lista2

5° QUESTÃO--5° NIVEL MASTER PROIBIDO PARA MENORES DE 18 ANOS.Prelude> foldr1 (-) [4,3,2]3

Prelude> foldl1 (-) [-2,3,4]-9

Page 13: Resolução lista2

Agradecimentos

Ao Prof°- Ricardo Reis e a todos os participantes do projeto haskell ufc.