SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Programação Funcional
em Haskell
7a Reunião —IO, Algumas Bibliotecas
Conteúdo e objetivos
 Introdução à programação funcional usando Haskell
 Objetivos de aprendizagem
 Introdução a Programas Interativos;
 Algumas Bibliotecas do Haskell;
Programas Interativos
Até agora apenas escrevemos programas que efetuam
computação pura, i.e., transformações funcionais entre valores.
Vamos agora ver como escrever programas interativos:
• lêm informação do teclado, ficheiros, etc.;
• escrevem no terminal ou em ficheiros;
• . . .
Ações de I/O
Introduzimos um novo tipo IO ()
Encadear ações
Podemos combinar duas ações de I/O usando o operador de
sequênciação:
Exemplos:
putChar ‘X’ :: IO () -- imprime um ’X’
putChar ‘Z’ :: IO () -- imprime um ’Y’
putChar :: Char -> IO () -- imprimir um carater
(>>) :: IO () -> IO () -> IO ()
Exemplos:
(putChar ‘X' >> putChar ‘Z') :: IO () -- imprimir “XZ"
(putChar ‘Z' >> putChar ‘X') :: IO () -- imprimir “ZX"
Note que >> é associativo mas não é comutativo!
Encadear ações (cont.)
Em alternativa podemos usando a notação-do:
Encadear ações
Podemos omitir os sinais de pontuação usando a indentação:
putChar ‘C' >> putChar ‘R' >> putChar ‘S'
Equivale à:
do {putChar ‘C'; putChar ‘R'; putChar ‘S'}
do putChar ‘C'
putChar 'R‘
putChar ‘I‘
putChar ‘S‘
Execução
Para efetuar as ações de I/O definimos um valor main no
módulo Main.
Encadear ações
Podemos omitir os sinais de pontuação usando a indentação:
module Main where
main = do putChar 'A'
putChar 'B‘
Compilar e executar:
$ ghc Main.hs -o prog
$ ./prog
AB$
ou
$ ghc --make Main.hs prog
$ ./prog
Execução (cont).
Também podemos efetuar ações IO diretamente no ghci:
Prelude> putChar 'A' >> putChar 'B’ >> putChar ‘n’
AB
Prelude>
Ações IO pré-definidas
getChar :: IO Char -- ler um caracter
getLine :: IO String -- ler uma linha
getContents :: IO String -- ler toda a entrada padrão
putChar :: Char -> IO () -- escrever um caracter
putStr :: String -> IO () -- escrever uma linha de texto
putStrLn :: String -> IO () -- idem com mudança de linha
print :: Show a => a -> IO () -- imprimir um valor
return :: a -> IO a -- ação vazia
Algumas Bibliotecas
Data.List operações sobre listas
Data.Set conjuntos finitos
Data.Map tabelas de associação
Data.Time funções de relógio e tempo
Network.HTTP protocolo de rede HTTP
Data.List
Mais funções sobre listas (para além do Prelúdio):
insert :: Ord a => a -> [a] -> [a]
delete :: Eq a => a -> [a] -> [a]
nub :: Eq a => [a] -> [a]
union :: Eq a => [a] -> [a] -> [a]
intersect :: Eq a => [a] -> [a] -> [a]
sort :: Ord a => [a] -> [a]
find :: (a -> Bool) -> [a] -> Maybe a
. . .muitas mais omitidas.
Exemplos Data.List (cont.)
> import Data.Char
> import Data.List
> insert 3 [1,2,5,7] -- lista ordenada
[1,2,3,5,7]
> nub "banana"
"ban"
> delete 'a' "banana"
"bnana"
> find isUpper "banana"
Nothing
> find (>'b') "banana"
Just 'n'
Data.Set
data Set a
empty :: Set a
fromList :: Ord a => [a] -> Set a
insert, delete :: Ord a => a -> Set a -> Set a
member :: Ord a => a -> Set a -> Bool
size :: Set a -> Int
union, intersection, difference :: Ord a =>
Set a -> Set a -> Set a
. . .muitas outras funções omitidas.
Exemplos Data.Set (cont.)
> import Data.Set
> let a = fromList [1,3..20]
> let b = fromList [1,5..20]
> intersection a b
fromList [1,5,9,13,17]
> difference a b
fromList [3,7,11,15,19]
> member 15 (difference a b)
True
> size (difference a b)
5
Network.HTTP & Data.Time
-- obter a hora e data atual
import Data.Time
main = do t <- getCurrentTime
putStrLn ("Data e hora atual: " ++ show t)
-- buscar uma página HTML como texto
import Network.HTTP
main = do r <- simpleHTTP (getRequest url)
html <- getResponseBody r
putStrLn html
where url = "http://www.haskell.org"
Bibliografia
Haskell - Uma abordagem prática. Cláudio César de Sá e
Márcio Ferreira da Silva. Novatec, 2006.
http://haskell.tailorfontela.com.br/
http://www.dcc.fc.up.pt/
http://www.haskell.org/hoogle/
Agradecimentos
Ao Prof°- Ricardo Reis e a todos os participantes do projeto
haskell ufc.

Mais conteúdo relacionado

Mais procurados

Segunda Apresentação jQuery
Segunda Apresentação jQuerySegunda Apresentação jQuery
Segunda Apresentação jQuerydouglasgrava
 
Apresentação j query5
Apresentação j query5Apresentação j query5
Apresentação j query5douglasgrava
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisFabrízio Mello
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB IILuiz Duarte
 
Apresentação j query6
Apresentação j query6Apresentação j query6
Apresentação j query6douglasgrava
 
Percorre os elementos da lista
Percorre os elementos da listaPercorre os elementos da lista
Percorre os elementos da listaIan Bertuzzo
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Renato Haddad
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação WebDalton Martins
 
Python no Power BI pelo SQL Server?
Python no Power BI pelo SQL Server?Python no Power BI pelo SQL Server?
Python no Power BI pelo SQL Server?FABIO SANTOS
 
Javascript - Agora a coisa ficou séria.
Javascript - Agora a coisa ficou séria.Javascript - Agora a coisa ficou séria.
Javascript - Agora a coisa ficou séria.Luiz Henrique Estacio
 
JQuery - JS 101
JQuery - JS 101JQuery - JS 101
JQuery - JS 101TheCoreh
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanosnobios
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
MongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggMongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggFelipe Guimarães
 
MongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéMongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéWagner Bonfiglio
 

Mais procurados (20)

Phpex2
Phpex2Phpex2
Phpex2
 
Segunda Apresentação jQuery
Segunda Apresentação jQuerySegunda Apresentação jQuery
Segunda Apresentação jQuery
 
Apresentação j query5
Apresentação j query5Apresentação j query5
Apresentação j query5
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 
Noçoes de LINQ
Noçoes de LINQNoçoes de LINQ
Noçoes de LINQ
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
 
Introdução ao MongoDB II
Introdução ao MongoDB IIIntrodução ao MongoDB II
Introdução ao MongoDB II
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
Apresentação j query6
Apresentação j query6Apresentação j query6
Apresentação j query6
 
Percorre os elementos da lista
Percorre os elementos da listaPercorre os elementos da lista
Percorre os elementos da lista
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
 
Python no Power BI pelo SQL Server?
Python no Power BI pelo SQL Server?Python no Power BI pelo SQL Server?
Python no Power BI pelo SQL Server?
 
Javascript - Agora a coisa ficou séria.
Javascript - Agora a coisa ficou séria.Javascript - Agora a coisa ficou séria.
Javascript - Agora a coisa ficou séria.
 
JQuery - JS 101
JQuery - JS 101JQuery - JS 101
JQuery - JS 101
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanos
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
MongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - NaveggMongoDB - Wagner Bonfiglio - Navegg
MongoDB - Wagner Bonfiglio - Navegg
 
MongoDB - Workshop Buscapé
MongoDB - Workshop BuscapéMongoDB - Workshop Buscapé
MongoDB - Workshop Buscapé
 

Destaque

Destaque (6)

Rssf com TinyOS
Rssf com TinyOSRssf com TinyOS
Rssf com TinyOS
 
Monografia
MonografiaMonografia
Monografia
 
Computacao Movel e Sem Fio
Computacao Movel e Sem FioComputacao Movel e Sem Fio
Computacao Movel e Sem Fio
 
Redes sem fio
Redes sem fioRedes sem fio
Redes sem fio
 
Trabalho: Rede sem fio.
Trabalho: Rede sem fio.Trabalho: Rede sem fio.
Trabalho: Rede sem fio.
 
Aula 1 - Redes sem fios - Introdução
Aula 1 - Redes sem fios - IntroduçãoAula 1 - Redes sem fios - Introdução
Aula 1 - Redes sem fios - Introdução
 

Semelhante a Haskell aula7 libs_intro_arquivos

Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarCRISLANIO MACEDO
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiaisJosh Santos
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dadosJean Martina
 
Minicurso Básico de Python - PythonDay
Minicurso Básico de Python - PythonDayMinicurso Básico de Python - PythonDay
Minicurso Básico de Python - PythonDayDilan Nery Lopes
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01julianabdpaiva
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated QueryDalton Valadares
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)JugVale
 

Semelhante a Haskell aula7 libs_intro_arquivos (20)

Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Python 02
Python 02Python 02
Python 02
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiais
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Apresentação Lua
Apresentação LuaApresentação Lua
Apresentação Lua
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
App scala
App scalaApp scala
App scala
 
Minicurso Básico de Python - PythonDay
Minicurso Básico de Python - PythonDayMinicurso Básico de Python - PythonDay
Minicurso Básico de Python - PythonDay
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Jug bizus
Jug   bizusJug   bizus
Jug bizus
 

Mais de CRISLANIO MACEDO

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record LinkageCRISLANIO MACEDO
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019CRISLANIO MACEDO
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithmCRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...CRISLANIO MACEDO
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...CRISLANIO MACEDO
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationCRISLANIO MACEDO
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogosCRISLANIO MACEDO
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-endsCRISLANIO MACEDO
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federalCRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...CRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoCRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseCRISLANIO MACEDO
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesCRISLANIO MACEDO
 

Mais de CRISLANIO MACEDO (20)

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record Linkage
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019
 
Pitch Medbloc
Pitch MedblocPitch Medbloc
Pitch Medbloc
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithm
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast Communication
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogos
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-ends
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federal
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de Avaliação
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de Síntese
 
Resolução lista2
Resolução lista2Resolução lista2
Resolução lista2
 
Resoluçãohaskell2
Resoluçãohaskell2Resoluçãohaskell2
Resoluçãohaskell2
 
Haskell ufc quixadalista2
Haskell ufc quixadalista2Haskell ufc quixadalista2
Haskell ufc quixadalista2
 
Haskell ufc quixadalista1
Haskell ufc quixadalista1Haskell ufc quixadalista1
Haskell ufc quixadalista1
 
Haskell motivação
Haskell motivaçãoHaskell motivação
Haskell motivação
 
Haskell motivaçãoaula2
Haskell motivaçãoaula2Haskell motivaçãoaula2
Haskell motivaçãoaula2
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classes
 

Haskell aula7 libs_intro_arquivos

  • 1. Programação Funcional em Haskell 7a Reunião —IO, Algumas Bibliotecas
  • 2. Conteúdo e objetivos  Introdução à programação funcional usando Haskell  Objetivos de aprendizagem  Introdução a Programas Interativos;  Algumas Bibliotecas do Haskell;
  • 3. Programas Interativos Até agora apenas escrevemos programas que efetuam computação pura, i.e., transformações funcionais entre valores. Vamos agora ver como escrever programas interativos: • lêm informação do teclado, ficheiros, etc.; • escrevem no terminal ou em ficheiros; • . . .
  • 4. Ações de I/O Introduzimos um novo tipo IO () Encadear ações Podemos combinar duas ações de I/O usando o operador de sequênciação: Exemplos: putChar ‘X’ :: IO () -- imprime um ’X’ putChar ‘Z’ :: IO () -- imprime um ’Y’ putChar :: Char -> IO () -- imprimir um carater (>>) :: IO () -> IO () -> IO () Exemplos: (putChar ‘X' >> putChar ‘Z') :: IO () -- imprimir “XZ" (putChar ‘Z' >> putChar ‘X') :: IO () -- imprimir “ZX" Note que >> é associativo mas não é comutativo!
  • 5. Encadear ações (cont.) Em alternativa podemos usando a notação-do: Encadear ações Podemos omitir os sinais de pontuação usando a indentação: putChar ‘C' >> putChar ‘R' >> putChar ‘S' Equivale à: do {putChar ‘C'; putChar ‘R'; putChar ‘S'} do putChar ‘C' putChar 'R‘ putChar ‘I‘ putChar ‘S‘
  • 6. Execução Para efetuar as ações de I/O definimos um valor main no módulo Main. Encadear ações Podemos omitir os sinais de pontuação usando a indentação: module Main where main = do putChar 'A' putChar 'B‘ Compilar e executar: $ ghc Main.hs -o prog $ ./prog AB$ ou $ ghc --make Main.hs prog $ ./prog
  • 7. Execução (cont). Também podemos efetuar ações IO diretamente no ghci: Prelude> putChar 'A' >> putChar 'B’ >> putChar ‘n’ AB Prelude>
  • 8. Ações IO pré-definidas getChar :: IO Char -- ler um caracter getLine :: IO String -- ler uma linha getContents :: IO String -- ler toda a entrada padrão putChar :: Char -> IO () -- escrever um caracter putStr :: String -> IO () -- escrever uma linha de texto putStrLn :: String -> IO () -- idem com mudança de linha print :: Show a => a -> IO () -- imprimir um valor return :: a -> IO a -- ação vazia
  • 9. Algumas Bibliotecas Data.List operações sobre listas Data.Set conjuntos finitos Data.Map tabelas de associação Data.Time funções de relógio e tempo Network.HTTP protocolo de rede HTTP
  • 10. Data.List Mais funções sobre listas (para além do Prelúdio): insert :: Ord a => a -> [a] -> [a] delete :: Eq a => a -> [a] -> [a] nub :: Eq a => [a] -> [a] union :: Eq a => [a] -> [a] -> [a] intersect :: Eq a => [a] -> [a] -> [a] sort :: Ord a => [a] -> [a] find :: (a -> Bool) -> [a] -> Maybe a . . .muitas mais omitidas.
  • 11. Exemplos Data.List (cont.) > import Data.Char > import Data.List > insert 3 [1,2,5,7] -- lista ordenada [1,2,3,5,7] > nub "banana" "ban" > delete 'a' "banana" "bnana" > find isUpper "banana" Nothing > find (>'b') "banana" Just 'n'
  • 12. Data.Set data Set a empty :: Set a fromList :: Ord a => [a] -> Set a insert, delete :: Ord a => a -> Set a -> Set a member :: Ord a => a -> Set a -> Bool size :: Set a -> Int union, intersection, difference :: Ord a => Set a -> Set a -> Set a . . .muitas outras funções omitidas.
  • 13. Exemplos Data.Set (cont.) > import Data.Set > let a = fromList [1,3..20] > let b = fromList [1,5..20] > intersection a b fromList [1,5,9,13,17] > difference a b fromList [3,7,11,15,19] > member 15 (difference a b) True > size (difference a b) 5
  • 14. Network.HTTP & Data.Time -- obter a hora e data atual import Data.Time main = do t <- getCurrentTime putStrLn ("Data e hora atual: " ++ show t) -- buscar uma página HTML como texto import Network.HTTP main = do r <- simpleHTTP (getRequest url) html <- getResponseBody r putStrLn html where url = "http://www.haskell.org"
  • 15. Bibliografia Haskell - Uma abordagem prática. Cláudio César de Sá e Márcio Ferreira da Silva. Novatec, 2006. http://haskell.tailorfontela.com.br/ http://www.dcc.fc.up.pt/ http://www.haskell.org/hoogle/
  • 16. Agradecimentos Ao Prof°- Ricardo Reis e a todos os participantes do projeto haskell ufc.