SlideShare uma empresa Scribd logo
1 de 107
Introdução a Linguagem
de Programação Haskell
          Bruno Rafael
          Emanuel Franco
          Iorgama Porcely
          Jessyka Oliveira



                 27 de Novembro
Tópicos

 Introdução a Haskell
 Tipos de dados
 Operadores
 Criando funções
 Recursão
 Pattern Matching
 Guards
 Listas
 Tuplas
O que é Haskell?

 Linguagem       de   programação   puramente
  funcional.

 Variáveis    imutáveis;

 Expressões   em formas de funções, sem
  efeitos colaterais, ou seja, a função ira
  somente calcular algo e devolve-lo como
  resultado.
O que é Haskell?

 Inicialmenteessa forma pode ser visto como
  uma limitação, porém:

 Quando   uma função é chamada duas vezes
  com os mesmos parâmetros, é garantido o
  retorno do mesmo resultado. Isso se chama
  transparência referencial.
Transparência referencial

 Permite
        que o compilador raciocine sobre o
 comportamento do programa;

 Permiteque você deduza
 facilmente (e até mesmo prove)
 que uma função está correta;

 Permitea construção de funções mais
 complexas juntando diversas funções
 simples
Haskell é preguiçoso

 Não irá executar funções e calcular as coisas
  antes que ele seja realmente obrigado a lhe
  mostrar um resultado.

 Istopermite simplificar
  coisas como estruturas de
  dados infinitas.
Exemplo

 Temos    a seguinte lista de números imutável:

 xs   = [1,2,3,4,5,6,7,8]

 Função  DoubleMe (Multiplica cada elemento
 por 2 e retorna uma nova lista)

 Queremos     multiplicar nossa lista por 8.
Na linguagem imperativa

 Fazendo:
   doubleMe (doubleMe (doubleMe (xs )))

 Provavelmente  iria passar uma vez pela lista,
 fazer uma cópia e retornar. Em seguida, ele
 iria passar por mais duas vezes e retornar o
 resultado.
Na linguagem preguiçosa

 Fazendo:
     doubleMe (doubleMe (doubleMe (xs )))

A função será executada
 para o primeiro elemento
 da lista, seguido dos
 elementos seguintes.
 Assim a lista é percorrida somente uma vez.
Haskell é estaticamente tipada

O   compilador saberá no código o que é um
  número, o que é uma string e assim por
  diante.

 Uma   série de possíveis erros poderão ser
  capturados em tempo de compilação.

 Ex.:  Tentando adicionar um número a uma
  string, o compilador ira se queixar com você.
Inferência de Tipo

 Não   é necessário explicitamente identificar
  cada pedaço de código com um tipo;
 O sistema de tipos inteligente do Haskell
  descobrirá muito sobre ele.
  Ex.: Tendo a = 5 + 4, não é necessário dizer
  que a é um número, pois já será identificado.
Elegante e Conciso

 Utiliza
        uma série de conceitos de alto nível;
 Programas Haskell são normalmente mais
  curtos do que os seus equivalentes
  imperativos;
 Programas mais curtos são mais fáceis de
  se manter e têm menos bugs.
Feito por caras realmente
inteligentes
   O trabalho sobre Haskell
    começou em 1987 quando
    uma comissão de
    pesquisadores se reuniu
    para projetar uma linguagem
    matadora. Em 2003, o Relatório
    Haskell foi publicado já com
    uma versão estável da
    linguagem.
O que preciso para começar?

 Interpretador HUGS
  http://cvs.haskell.org/Hugs/pages/downloadin
  g.htm
 Compilador GHC
  http://www.haskell.org/ghc/download.html
HUGS – Primeiros comandos

 :quit   - Sai do Hugs

 :?   - Exibe a ajuda do Hugs

 :load <caminho_do_arquivo> - Carrega um
  arquivo para o Hugs

 :reload -      Recarrega   o   último   arquivo
  carregado
Operações




 Pode-se utilizar todos operadores comuns
 em uma só linha e todas suas regras usuais
 precedentes serão obedecidas.
Operações




 Podemos  utilizar parênteses para declarar
 de forma explicita a operação precedente ou
 para mudá-la
Operações

 Sevocê quiser obter números negativos,
 sempre tenha a operação determinada por
 parênteses.

 Fazendo 5 * -3 o GHCI irá gritar com você;

 Fazendo 5 *       (-3)   isto   irá   funcionar
 perfeitamente
Operações Booleanas




 Onde    && refere-se     a     expressão
 booleana and, ||refere-se a expressão
 booleana or. not faz    a   negação    de
 um True ou de um False.
Testes de igualdades

 Vejamos alguns testes com operadores de
 igualdade:
Operadores para inteiros

 Além   dos operadores convencionais temos:

    ^ : para cálculos de Potência.

ghci> 2 ^ 4
16
ghci> 4 ^ 4
256 Q
Funções para Inteiros

 div   : divisão de números
ghci> div 4 2
2

 mod:    resto da divisão
ghci> mod 10 3
1
Funções para Inteiros

 succ   : retorna sucessor

ghci> succ 8
9


 negate:   muda sinal do número

ghci> negate 10
-10
Funções para Inteiros

 mim   : retorna menor valor
 ghci> mim 9 10
 9



 max:   retorna maior valor
 ghci> max 100 101
 101
Funções para Inteiros

 Fuções   podem      ser    escritas   como
 operadores, e vice-versa:

ghci> 4 `div` 2
2

ghci> (+) 4 2
6
Funções para Inteiros

 As funções tem precedencia sobre as
 operações, como podemos ver abaixo:




 As   duas expressões são equivalentes.
Tipos e Funções para Float

 Os    mesmos dos inteiros, com mais alguns:

 **   : Exponenciação;

 cos,   sin, tag: Coseno, Seno e Tangente;

 log:   Logaritmo na base e;

 logBase:   Logaritmo em base qualquer.
Tipos e Funções para Float

 sqrt:   raiz quadrada;
ghci> sqrt 16
4.0

 pi:   Constante pi;
ghci> 2 * pi
6.28318530717959
Fazendo sua própria função

 Vamos agora fazer nossa primeira função.
 No editor de texto escreva:
   doubleMe x = x + x

 Salve como “baby.hs”.

 Essa função retornará o dobro
 do valor de entrada.
Fazendo sua própria função

 Indoao local onde o arquivo foi salvo
  execute os seguintes passos:
ghci> :1 baby  
[1 of 1] Compiling Main             ( baby.h
s, interpreted )  
Ok, modules loaded: Main.  

-- Função compilada, agora vamos
testar

ghci> doubleMe 9  
18  
ghci> doubleMe 8.3  
16.6   
Recursão

 Forma de definir funções   que   fazem
 chamadas a si próprias.
Recursão

 Forma   de definir funções            que   fazem
  chamadas a si próprias.
 Regras:
  –   Ter condição de parada.
  –   Tornar o problema mais simples.
Recursão

 Fatorial:
  - Condição de parada: fatorial 0 = 1.
  - Ex: 3!
        = 3 * 2!
        = 2 * 1!
        = 1 * 0!
        = 0!
Recursão

 Fatorial:
  - Condição de parada: fatorial 0 = 1.
  - Ex: 3!
        = 3 * 2!
        = 2 * 1!
        = 1 * 0!
        = 0! = 1
     Logo, 3 * ( 2 * ( 1 * 1)) .
Recursão

 fatorial.hs




 Terminal ghci.
Recursão

 Fibonacci:
    - Condição Limite:
          F(0) = 0.
          F(1) = 1.
    - F(n) = F(n – 1) + F(n - 2)
Recursão

 Fibonacci:
    - EX: F(3)
    F(3) = F(2) + F(1)
    F(2) = F(1) + F(0)
    F(1) = 1
    F(0) = 0
Recursão

 Fibonacci:
    - EX: F(3)
    F(3) = F(2) + F(1)
    F(2) = F(1) + F(0)
    F(1) = 1
    F(0) = 0

    Logo, F(3) = F(1) + F(0) + F(1).
Recursão

 fibonacci.hs




 Terminal ghci
Pattern Matching

 Pesquisa por padrões de dados e, caso
 obtenha sucesso, fazer algo com ele.
Pattern Matching

 Pesquisa  por padrões de dados e, caso
  obtenha sucesso, fazer algo com ele.
 Construção sintática do Haskell.
Pattern Matching

 Construção sintática do Haskell.
 Pesquisa por padrões de dados e, caso
  obtenha sucesso, fazer algo com ele.
 Código:
  –   Simples.
  –   Conciso.
  –   Legível.
Pattern Matching

 Pode   ser usado com:
  –   Números.
  –   Caracteres.
  –   Listas.
  –   Tuplas.
Pattern Matching

 Ex:   sorte.hs




 Terminal ghci
Pattern Matching

 Exercício:
    Implementar a função sayMe.hs, que diz seu
    parametro de 1 até 5 ou “não está entre 1 e 5”.
Pattern Matching

 Exercício:
    Implementar uma função que diz se parametro de
    1 até 5 ou “Não está entre 1 e 5”.
 Dicas:
    1. SayMe :: (Num a) => a → String.
    2. sayMe 1 = “Um!”.
               (…)
    3. sayMe x = “Não está entre 1 e 5”.
Pattern Matching

 Resposta: sayMe.hs
Pattern Matching
 Ex2:
 car.hs




 Terminal ghci
Pattern Matching




   Pattern Matching também pode falhar!
Guards

 Forma de testar se uma ou mais
 propriedades são V. ou F.
Guards

 Forma  de testar se uma ou mais
  propriedades são V. ou F.
 Funcionam bem com Patterns.
Guards

 Ex:Função que repreende o usuário de uma
 forma específica, dependendo do seu IMC.
  –   Imc <= 18,5: Considerado magro.
  –   Imc <= 25,0: Considerado saudável.
  –   Imc <= 30,0: Considerado gordo.
Guards

 Ex:
 imc.hs
Guards

 Ex:
 Melhorando o código: imc.hs
Guards

 Ex:
 Melhorando o código:
          Terminal ghci
Guards

 Exercício:


  Implementar a função max.hs, que recebe
  dois parâmetros e retorna o maior.
Guards

 Exercício:


  max.hs
Maximum

 Recebeuma lista de coisas que podem ser
 ordenadas e retorna a maior dela.
Maximum

 Recebeuma lista de coisas que podem ser
 ordenadas e retorna a maior dela.

 Exemplo:   Instâncias do Typeclass Ord.
Maximum

 Ex: Programa que recebe uma lista de
 coisas e retorna a maior dela.
Maximum

 Ex:
    maximo.hs
Maximum

 Exercício:
  Implementar a Função somaLista.hs, para
  somar os elementos de uma lista.
Maximum

 Exercício:
  Implementar a Função somaLista.hs, para
  somar os elementos de uma lista.
 Dicas:
    1. sumList :: [Int] → Int.
    2. Caso Base: sumList [] = 0.
    3. Caso recursivo: sumList (a:as) = a + sumList
    as.
Listas

 Listas   são estruturas de dados homogêneas:
  –   Armazena vários elementos do MESMO tipo

  –   Lista de caracteres
        listaVogais   = ['a','e','i','o','u']


  –   Lista de inteiros
        listaNumPar     = [2,4,6,8]
Listas

 Listas   são estruturas de dados homogêneas:
  –   Lista de caracteres



  –   Lista de inteiros



  –   Lista vazia
Listas

O   que caracteriza uma lista?

                              utilizam colchetes




              valores são separados por vírgulas
Listas

O   Haskell irá reclamar da lista abaixo?
Listas

O   Haskell irá reclamar da lista abaixo?


 Sim, porque não há apenas um tipo de dado
 na lista!!
Listas

 Listas   podem conter listas que contem listas
Operadores

 Pode-ser   usado ainda >, <, >=, <=, ==, /=




  E se as listas comparadas
  são de tipos diferentes?
Strings – Um tipo especial

 String    é uma lista de caracteres

 “hello”   é o mesmo que ['h','e','l','l','o']

 String    podem usar as mesmas funções de
  listas

 Vamos      conhecê-los?!
Operações com listas

 ++   → Unir duas listas:


:→ Acrescentar um elemento no início de
 uma lista
Operações com listas

 !!   → Obter um elemento pelo seu índice




   E se o índice for superior
   ao tamanho da lista?
Operações com listas
Operações com listas

 head     → retorna o primeiro elemento

 tail   → retorna tudo, exceto o primeiro elemento

                                       Cuidado para não
 last   → retorna o último elemento   Utilizá-los em
                                       listas vazias!!
 init   → retorna tudo, exceto o último elemento
Operações com listas

 length   → retorna o seu tamanho

 null   → verifica se a lista é vazia

 reverse    → reverte uma lista

 take→ retorna um
  número desejados de
  elementos da lista
Operações com listas

 drop → similar ao take, mas
 retira do início da lista

 maximum    → retorna o maior elemento

 minimum    → retorna o menor elemento

 sum    → retorna a soma
Operações com listas

 product   → retorna o produto


 elem   → verifica se o elemento pertence a lista


 replicate
          → repete o mesmo
  elemento em um nova lista
Operações com listas - Ranges

E se você precisar de uma lista com todos os
 números entre 1 e 10?

 Solução:   [1,2,3,4,5,6,7,8,9,10]?

E   se for entre 1 e 1000?

 ou   10000?
Operações com listas - Ranges

 Não!!   Perda de tempo.

E  se você precisar de uma lista com todos os
  números entre 1 e 10? ou 1000?
  ou 10000?

 Solução:   Utilizamos os ranges!!
Operações com listas - Ranges

 São uma sequência aritmética de elementos
 devidamente enumerados

 Números   e caracteres podem ser enumerados.
 Ex. 1, 2, 3,…, 100    | A, B, C, ..., Z
Operações com listas - Ranges

E  se quisermos todos os números ímpares
 entre 1 e 20? Ou se quisermos sempre ter o
 terceiro número entre 1 e 20?

 Podemos   definir etapas específicas!!
Tuplas

 Um jeito de armazenar muitos elementos em
  um único lugar
 Não precisa ser homogênera
Tuplas

O   que caracteriza uma tupla?

                             utilizam parênteses




             valores são separados por vírgulas
Operadores

  Pode-ser    usado ainda >, <, >=, <=, ==, /=




E se as tuplas
comparadas são de
tipos/tamanhos diferentes?
Operações com tuplas (par)

 fst   → retorna seu primeiro componente

 snd    → retorna seu segundo componente
Entradas e Saídas de dados

 Fornecer   dados e receber dados são de
 suma importância para que exista uma
 interatividade maior entre usuário e máquina.
Entradas e Saídas de dados

 Abram   um editor de texto.


<   main = putStr "hello, world" >

 Salvem   em uma pasta com o nome “teste.hs”
Entradas e Saídas de dados

 Compilar
  –   ghc -o teste teste.hs

 Executar
  –   ./teste
Entradas e Saídas de dados

 putStr→ imprimi uma string sem pular linha
 putStrLn → imprimi uma string pulando uma
  linha
Entradas e Saídas de dados

 main = do
   putStrLn "Qual seu nome?"
   name <- getLine
   putStrLn ("Eu sou " ++ name)
Entradas e Saídas de dados

 import Data.Char
  main = do
    putStrLn "Qual é o seu primeiro nome?"
    firstName <- getLine
    putStrLn "Qual é o seu segundo nome?"
    lastName <- getLine
    let bigFirstName = map toUpper firstName
        bigLastName = map toUpper lastName
    putStrLn $ "Olá " ++ bigFirstName ++ " " ++
 bigLastName
Entradas e Saídas de dados

 main = do
   line <- getLine
   if null line
       then return ()
       else do
          putStrLn $ reverseWords line
          main

 reverseWords :: String -> String
 reverseWords = unwords . map reverse . words
Entradas e Saídas de dados

 main = do
   return ()
   return "HAHAHA"
   line <- getLine
   return "BLAH BLAH BLAH"
   return 4
   putStrLn line
Entradas e Saídas de dados

 main = do
   a <- return "Alô"
   b <- return "Mundo!"
   putStrLn $ a ++ " " ++ b
Entradas e Saídas de dados

 main = do
   c <- getChar
   if c /= ' '
       then do
          putChar c
          main
       else return ()
Entradas e Saídas de dados

 import Control.Monad

 main = do
   c <- getChar
   when (c /= ' ') $ do
      putChar c
      main
Entradas e Saídas de dados

 main = do
   a <- getLine
   b <- getLine
   c <- getLine
   print [a,b,c]
Entradas e Saídas de dados

 main = do
   rs <- sequence [getLine, getLine, getLine]
   print rs
Entradas e Saídas de dados

 main = do
   contents <- getContents
   putStr (shortLinesOnly contents)

 shortLinesOnly :: String -> String
 shortLinesOnly input =
   let allLines = lines input
      shortLines = filter (line -> length line < 15) allLines
     result = unlines shortLines
   in result
Entradas e Saídas de dados

 main = do
   rs <- sequence [getLine, getLine, getLine]
   print rs
Entradas e Saídas de dados

 import System.IO

 main = do
   contents <- readFile   "/caminho/texto.txt"
   putStr contents
Entradas e Saídas de dados

 import System.IO
 import Data.Char

 main = do
   contents <- readFile "texto.txt"
   writeFile "novotexto.txt" (map toUpper contents)
Entradas e Saídas de dados

 import System.IO

 main = do
   todoItem <- getLine
   appendFile "novotexto2.txt" (todoItem ++ "n")
Referências Bibliográficas

 Aprender   Haskell será um grande bem para
  você!
  http://haskell.tailorfontela.com.br/
 Programação Funcional com a linguagem
  Haskell
  http://www.cin.ufpe.br/~dclal/monitoria/duBoi
  s.pdf
Haskell
     Obrigada!
    Perguntas?
Introdução a Linguagem
de Programação Haskell
          Bruno Rafael
          Emanuel Franco
          Iorgama Porcely
          Jessyka Oliveira

Mais conteúdo relacionado

Mais procurados

Conceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dadosConceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dadosBruno Pereira
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Concorrência na Linguagem de Programação
Concorrência na Linguagem de ProgramaçãoConcorrência na Linguagem de Programação
Concorrência na Linguagem de ProgramaçãoAlexsandro Pereira
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoessamuelthiago
 
Gerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas OperacionaisGerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas OperacionaisLeandro Júnior
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Exercício - Adição de números Binários
Exercício - Adição de números BináriosExercício - Adição de números Binários
Exercício - Adição de números BináriosSuzana Viana Mota
 
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoCurso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoLoiane Groner
 
Apresentação da disciplina Topicos Especiais em Sistemas de Informação
Apresentação da disciplina Topicos Especiais em Sistemas de InformaçãoApresentação da disciplina Topicos Especiais em Sistemas de Informação
Apresentação da disciplina Topicos Especiais em Sistemas de InformaçãoRogerio P C do Nascimento
 
Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasLeinylson Fontinele
 

Mais procurados (20)

Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 
Conceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dadosConceitos geraiss gestão de base dados
Conceitos geraiss gestão de base dados
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Aula 4 – Linguagem HTML - Imagens e links
Aula 4 – Linguagem HTML - Imagens e linksAula 4 – Linguagem HTML - Imagens e links
Aula 4 – Linguagem HTML - Imagens e links
 
Concorrência na Linguagem de Programação
Concorrência na Linguagem de ProgramaçãoConcorrência na Linguagem de Programação
Concorrência na Linguagem de Programação
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoes
 
Gerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas OperacionaisGerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas Operacionais
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Exercício - Adição de números Binários
Exercício - Adição de números BináriosExercício - Adição de números Binários
Exercício - Adição de números Binários
 
Python modules
Python modulesPython modules
Python modules
 
Queue
QueueQueue
Queue
 
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoCurso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
Apresentação da disciplina Topicos Especiais em Sistemas de Informação
Apresentação da disciplina Topicos Especiais em Sistemas de InformaçãoApresentação da disciplina Topicos Especiais em Sistemas de Informação
Apresentação da disciplina Topicos Especiais em Sistemas de Informação
 
Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas Estáticas
 
Aula 9 banco de dados
Aula 9   banco de dadosAula 9   banco de dados
Aula 9 banco de dados
 

Semelhante a Introdução à Haskell

Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcionalGabriel Schade Cardoso
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskellDaniel Farias
 
Aula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptxAula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptxLemosManuel
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Thaci Santos
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasÉverton Ribeiro
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoMarcelo Rodrigues
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Filipe Chagas Ferraz
 

Semelhante a Introdução à Haskell (20)

Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Aula4
Aula4Aula4
Aula4
 
Shell script
Shell script Shell script
Shell script
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Python
PythonPython
Python
 
Aula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptxAula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptx
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 
Algoritmo0
Algoritmo0Algoritmo0
Algoritmo0
 
M5 php rc
M5 php rcM5 php rc
M5 php rc
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadas
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de Programação
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
 
Slides do cuso_php
Slides do cuso_phpSlides do cuso_php
Slides do cuso_php
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 

Mais de Iorgama Porcely

Mais de Iorgama Porcely (6)

Segurança em Banco de Dados
Segurança em Banco de DadosSegurança em Banco de Dados
Segurança em Banco de Dados
 
Pylint
PylintPylint
Pylint
 
Transformações 3D
Transformações 3DTransformações 3D
Transformações 3D
 
Segmentação de imagem
Segmentação de imagemSegmentação de imagem
Segmentação de imagem
 
Modelos de cores
Modelos de coresModelos de cores
Modelos de cores
 
Fluxos em Rede e Associação
Fluxos em Rede e AssociaçãoFluxos em Rede e Associação
Fluxos em Rede e Associação
 

Último

Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresAnaCarinaKucharski1
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfMárcio Azevedo
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?AnabelaGuerreiro7
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memorialgrecchi
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxDianaSheila2
 

Último (20)

Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdf
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memoria
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptx
 

Introdução à Haskell

  • 1. Introdução a Linguagem de Programação Haskell Bruno Rafael Emanuel Franco Iorgama Porcely Jessyka Oliveira 27 de Novembro
  • 2. Tópicos  Introdução a Haskell  Tipos de dados  Operadores  Criando funções  Recursão  Pattern Matching  Guards  Listas  Tuplas
  • 3. O que é Haskell?  Linguagem de programação puramente funcional.  Variáveis imutáveis;  Expressões em formas de funções, sem efeitos colaterais, ou seja, a função ira somente calcular algo e devolve-lo como resultado.
  • 4. O que é Haskell?  Inicialmenteessa forma pode ser visto como uma limitação, porém:  Quando uma função é chamada duas vezes com os mesmos parâmetros, é garantido o retorno do mesmo resultado. Isso se chama transparência referencial.
  • 5. Transparência referencial  Permite que o compilador raciocine sobre o comportamento do programa;  Permiteque você deduza facilmente (e até mesmo prove) que uma função está correta;  Permitea construção de funções mais complexas juntando diversas funções simples
  • 6. Haskell é preguiçoso  Não irá executar funções e calcular as coisas antes que ele seja realmente obrigado a lhe mostrar um resultado.  Istopermite simplificar coisas como estruturas de dados infinitas.
  • 7. Exemplo  Temos a seguinte lista de números imutável:  xs = [1,2,3,4,5,6,7,8]  Função DoubleMe (Multiplica cada elemento por 2 e retorna uma nova lista)  Queremos multiplicar nossa lista por 8.
  • 8. Na linguagem imperativa  Fazendo: doubleMe (doubleMe (doubleMe (xs )))  Provavelmente iria passar uma vez pela lista, fazer uma cópia e retornar. Em seguida, ele iria passar por mais duas vezes e retornar o resultado.
  • 9. Na linguagem preguiçosa  Fazendo: doubleMe (doubleMe (doubleMe (xs ))) A função será executada para o primeiro elemento da lista, seguido dos elementos seguintes. Assim a lista é percorrida somente uma vez.
  • 10. Haskell é estaticamente tipada O compilador saberá no código o que é um número, o que é uma string e assim por diante.  Uma série de possíveis erros poderão ser capturados em tempo de compilação.  Ex.: Tentando adicionar um número a uma string, o compilador ira se queixar com você.
  • 11. Inferência de Tipo  Não é necessário explicitamente identificar cada pedaço de código com um tipo;  O sistema de tipos inteligente do Haskell descobrirá muito sobre ele. Ex.: Tendo a = 5 + 4, não é necessário dizer que a é um número, pois já será identificado.
  • 12. Elegante e Conciso  Utiliza uma série de conceitos de alto nível;  Programas Haskell são normalmente mais curtos do que os seus equivalentes imperativos;  Programas mais curtos são mais fáceis de se manter e têm menos bugs.
  • 13. Feito por caras realmente inteligentes  O trabalho sobre Haskell começou em 1987 quando uma comissão de pesquisadores se reuniu para projetar uma linguagem matadora. Em 2003, o Relatório Haskell foi publicado já com uma versão estável da linguagem.
  • 14. O que preciso para começar?  Interpretador HUGS http://cvs.haskell.org/Hugs/pages/downloadin g.htm  Compilador GHC http://www.haskell.org/ghc/download.html
  • 15. HUGS – Primeiros comandos  :quit - Sai do Hugs  :? - Exibe a ajuda do Hugs  :load <caminho_do_arquivo> - Carrega um arquivo para o Hugs  :reload - Recarrega o último arquivo carregado
  • 16. Operações  Pode-se utilizar todos operadores comuns em uma só linha e todas suas regras usuais precedentes serão obedecidas.
  • 17. Operações  Podemos utilizar parênteses para declarar de forma explicita a operação precedente ou para mudá-la
  • 18. Operações  Sevocê quiser obter números negativos, sempre tenha a operação determinada por parênteses. Fazendo 5 * -3 o GHCI irá gritar com você; Fazendo 5 * (-3) isto irá funcionar perfeitamente
  • 19. Operações Booleanas  Onde && refere-se a expressão booleana and, ||refere-se a expressão booleana or. not faz a negação de um True ou de um False.
  • 20. Testes de igualdades  Vejamos alguns testes com operadores de igualdade:
  • 21. Operadores para inteiros  Além dos operadores convencionais temos: ^ : para cálculos de Potência. ghci> 2 ^ 4 16 ghci> 4 ^ 4 256 Q
  • 22. Funções para Inteiros  div : divisão de números ghci> div 4 2 2  mod: resto da divisão ghci> mod 10 3 1
  • 23. Funções para Inteiros  succ : retorna sucessor ghci> succ 8 9  negate: muda sinal do número ghci> negate 10 -10
  • 24. Funções para Inteiros  mim : retorna menor valor ghci> mim 9 10 9  max: retorna maior valor ghci> max 100 101 101
  • 25. Funções para Inteiros  Fuções podem ser escritas como operadores, e vice-versa: ghci> 4 `div` 2 2 ghci> (+) 4 2 6
  • 26. Funções para Inteiros  As funções tem precedencia sobre as operações, como podemos ver abaixo:  As duas expressões são equivalentes.
  • 27. Tipos e Funções para Float  Os mesmos dos inteiros, com mais alguns:  ** : Exponenciação;  cos, sin, tag: Coseno, Seno e Tangente;  log: Logaritmo na base e;  logBase: Logaritmo em base qualquer.
  • 28. Tipos e Funções para Float  sqrt: raiz quadrada; ghci> sqrt 16 4.0  pi: Constante pi; ghci> 2 * pi 6.28318530717959
  • 29. Fazendo sua própria função  Vamos agora fazer nossa primeira função. No editor de texto escreva: doubleMe x = x + x Salve como “baby.hs”. Essa função retornará o dobro do valor de entrada.
  • 30. Fazendo sua própria função  Indoao local onde o arquivo foi salvo execute os seguintes passos: ghci> :1 baby   [1 of 1] Compiling Main             ( baby.h s, interpreted )   Ok, modules loaded: Main.   -- Função compilada, agora vamos testar ghci> doubleMe 9   18   ghci> doubleMe 8.3   16.6   
  • 31. Recursão  Forma de definir funções que fazem chamadas a si próprias.
  • 32. Recursão  Forma de definir funções que fazem chamadas a si próprias.  Regras: – Ter condição de parada. – Tornar o problema mais simples.
  • 33. Recursão  Fatorial: - Condição de parada: fatorial 0 = 1. - Ex: 3! = 3 * 2! = 2 * 1! = 1 * 0! = 0!
  • 34. Recursão  Fatorial: - Condição de parada: fatorial 0 = 1. - Ex: 3! = 3 * 2! = 2 * 1! = 1 * 0! = 0! = 1 Logo, 3 * ( 2 * ( 1 * 1)) .
  • 36. Recursão  Fibonacci: - Condição Limite: F(0) = 0. F(1) = 1. - F(n) = F(n – 1) + F(n - 2)
  • 37. Recursão  Fibonacci: - EX: F(3) F(3) = F(2) + F(1) F(2) = F(1) + F(0) F(1) = 1 F(0) = 0
  • 38. Recursão  Fibonacci: - EX: F(3) F(3) = F(2) + F(1) F(2) = F(1) + F(0) F(1) = 1 F(0) = 0 Logo, F(3) = F(1) + F(0) + F(1).
  • 40. Pattern Matching  Pesquisa por padrões de dados e, caso obtenha sucesso, fazer algo com ele.
  • 41. Pattern Matching  Pesquisa por padrões de dados e, caso obtenha sucesso, fazer algo com ele.  Construção sintática do Haskell.
  • 42. Pattern Matching  Construção sintática do Haskell.  Pesquisa por padrões de dados e, caso obtenha sucesso, fazer algo com ele.  Código: – Simples. – Conciso. – Legível.
  • 43. Pattern Matching  Pode ser usado com: – Números. – Caracteres. – Listas. – Tuplas.
  • 44. Pattern Matching  Ex: sorte.hs Terminal ghci
  • 45. Pattern Matching  Exercício: Implementar a função sayMe.hs, que diz seu parametro de 1 até 5 ou “não está entre 1 e 5”.
  • 46. Pattern Matching  Exercício: Implementar uma função que diz se parametro de 1 até 5 ou “Não está entre 1 e 5”.  Dicas: 1. SayMe :: (Num a) => a → String. 2. sayMe 1 = “Um!”. (…) 3. sayMe x = “Não está entre 1 e 5”.
  • 48. Pattern Matching  Ex2: car.hs Terminal ghci
  • 49. Pattern Matching Pattern Matching também pode falhar!
  • 50. Guards  Forma de testar se uma ou mais propriedades são V. ou F.
  • 51. Guards  Forma de testar se uma ou mais propriedades são V. ou F.  Funcionam bem com Patterns.
  • 52. Guards  Ex:Função que repreende o usuário de uma forma específica, dependendo do seu IMC. – Imc <= 18,5: Considerado magro. – Imc <= 25,0: Considerado saudável. – Imc <= 30,0: Considerado gordo.
  • 54. Guards  Ex: Melhorando o código: imc.hs
  • 55. Guards  Ex: Melhorando o código: Terminal ghci
  • 56. Guards  Exercício: Implementar a função max.hs, que recebe dois parâmetros e retorna o maior.
  • 58. Maximum  Recebeuma lista de coisas que podem ser ordenadas e retorna a maior dela.
  • 59. Maximum  Recebeuma lista de coisas que podem ser ordenadas e retorna a maior dela.  Exemplo: Instâncias do Typeclass Ord.
  • 60. Maximum  Ex: Programa que recebe uma lista de coisas e retorna a maior dela.
  • 61. Maximum  Ex: maximo.hs
  • 62. Maximum  Exercício: Implementar a Função somaLista.hs, para somar os elementos de uma lista.
  • 63. Maximum  Exercício: Implementar a Função somaLista.hs, para somar os elementos de uma lista.  Dicas: 1. sumList :: [Int] → Int. 2. Caso Base: sumList [] = 0. 3. Caso recursivo: sumList (a:as) = a + sumList as.
  • 64. Listas  Listas são estruturas de dados homogêneas: – Armazena vários elementos do MESMO tipo – Lista de caracteres  listaVogais = ['a','e','i','o','u'] – Lista de inteiros  listaNumPar = [2,4,6,8]
  • 65. Listas  Listas são estruturas de dados homogêneas: – Lista de caracteres – Lista de inteiros – Lista vazia
  • 66. Listas O que caracteriza uma lista? utilizam colchetes valores são separados por vírgulas
  • 67. Listas O Haskell irá reclamar da lista abaixo?
  • 68. Listas O Haskell irá reclamar da lista abaixo?  Sim, porque não há apenas um tipo de dado na lista!!
  • 69. Listas  Listas podem conter listas que contem listas
  • 70. Operadores  Pode-ser usado ainda >, <, >=, <=, ==, /= E se as listas comparadas são de tipos diferentes?
  • 71. Strings – Um tipo especial  String é uma lista de caracteres  “hello” é o mesmo que ['h','e','l','l','o']  String podem usar as mesmas funções de listas  Vamos conhecê-los?!
  • 72. Operações com listas  ++ → Unir duas listas: :→ Acrescentar um elemento no início de uma lista
  • 73. Operações com listas  !! → Obter um elemento pelo seu índice E se o índice for superior ao tamanho da lista?
  • 75. Operações com listas  head → retorna o primeiro elemento  tail → retorna tudo, exceto o primeiro elemento Cuidado para não  last → retorna o último elemento Utilizá-los em listas vazias!!  init → retorna tudo, exceto o último elemento
  • 76. Operações com listas  length → retorna o seu tamanho  null → verifica se a lista é vazia  reverse → reverte uma lista  take→ retorna um número desejados de elementos da lista
  • 77. Operações com listas  drop → similar ao take, mas retira do início da lista  maximum → retorna o maior elemento  minimum → retorna o menor elemento  sum → retorna a soma
  • 78. Operações com listas  product → retorna o produto  elem → verifica se o elemento pertence a lista  replicate → repete o mesmo elemento em um nova lista
  • 79. Operações com listas - Ranges E se você precisar de uma lista com todos os números entre 1 e 10?  Solução: [1,2,3,4,5,6,7,8,9,10]? E se for entre 1 e 1000?  ou 10000?
  • 80. Operações com listas - Ranges  Não!! Perda de tempo. E se você precisar de uma lista com todos os números entre 1 e 10? ou 1000? ou 10000?  Solução: Utilizamos os ranges!!
  • 81. Operações com listas - Ranges  São uma sequência aritmética de elementos devidamente enumerados  Números e caracteres podem ser enumerados. Ex. 1, 2, 3,…, 100 | A, B, C, ..., Z
  • 82. Operações com listas - Ranges E se quisermos todos os números ímpares entre 1 e 20? Ou se quisermos sempre ter o terceiro número entre 1 e 20?  Podemos definir etapas específicas!!
  • 83. Tuplas  Um jeito de armazenar muitos elementos em um único lugar  Não precisa ser homogênera
  • 84. Tuplas O que caracteriza uma tupla? utilizam parênteses valores são separados por vírgulas
  • 85. Operadores  Pode-ser usado ainda >, <, >=, <=, ==, /= E se as tuplas comparadas são de tipos/tamanhos diferentes?
  • 86. Operações com tuplas (par)  fst → retorna seu primeiro componente  snd → retorna seu segundo componente
  • 87. Entradas e Saídas de dados  Fornecer dados e receber dados são de suma importância para que exista uma interatividade maior entre usuário e máquina.
  • 88. Entradas e Saídas de dados  Abram um editor de texto. < main = putStr "hello, world" >  Salvem em uma pasta com o nome “teste.hs”
  • 89. Entradas e Saídas de dados  Compilar – ghc -o teste teste.hs  Executar – ./teste
  • 90. Entradas e Saídas de dados  putStr→ imprimi uma string sem pular linha  putStrLn → imprimi uma string pulando uma linha
  • 91. Entradas e Saídas de dados main = do putStrLn "Qual seu nome?" name <- getLine putStrLn ("Eu sou " ++ name)
  • 92. Entradas e Saídas de dados import Data.Char main = do putStrLn "Qual é o seu primeiro nome?" firstName <- getLine putStrLn "Qual é o seu segundo nome?" lastName <- getLine let bigFirstName = map toUpper firstName bigLastName = map toUpper lastName putStrLn $ "Olá " ++ bigFirstName ++ " " ++ bigLastName
  • 93. Entradas e Saídas de dados main = do line <- getLine if null line then return () else do putStrLn $ reverseWords line main reverseWords :: String -> String reverseWords = unwords . map reverse . words
  • 94. Entradas e Saídas de dados main = do return () return "HAHAHA" line <- getLine return "BLAH BLAH BLAH" return 4 putStrLn line
  • 95. Entradas e Saídas de dados main = do a <- return "Alô" b <- return "Mundo!" putStrLn $ a ++ " " ++ b
  • 96. Entradas e Saídas de dados main = do c <- getChar if c /= ' ' then do putChar c main else return ()
  • 97. Entradas e Saídas de dados import Control.Monad main = do c <- getChar when (c /= ' ') $ do putChar c main
  • 98. Entradas e Saídas de dados main = do a <- getLine b <- getLine c <- getLine print [a,b,c]
  • 99. Entradas e Saídas de dados main = do rs <- sequence [getLine, getLine, getLine] print rs
  • 100. Entradas e Saídas de dados main = do contents <- getContents putStr (shortLinesOnly contents) shortLinesOnly :: String -> String shortLinesOnly input = let allLines = lines input shortLines = filter (line -> length line < 15) allLines result = unlines shortLines in result
  • 101. Entradas e Saídas de dados main = do rs <- sequence [getLine, getLine, getLine] print rs
  • 102. Entradas e Saídas de dados import System.IO main = do contents <- readFile "/caminho/texto.txt" putStr contents
  • 103. Entradas e Saídas de dados import System.IO import Data.Char main = do contents <- readFile "texto.txt" writeFile "novotexto.txt" (map toUpper contents)
  • 104. Entradas e Saídas de dados import System.IO main = do todoItem <- getLine appendFile "novotexto2.txt" (todoItem ++ "n")
  • 105. Referências Bibliográficas  Aprender Haskell será um grande bem para você! http://haskell.tailorfontela.com.br/  Programação Funcional com a linguagem Haskell http://www.cin.ufpe.br/~dclal/monitoria/duBoi s.pdf
  • 106. Haskell Obrigada! Perguntas?
  • 107. Introdução a Linguagem de Programação Haskell Bruno Rafael Emanuel Franco Iorgama Porcely Jessyka Oliveira