Você está na página 1de 12

Programação Prof.

Ricardo Mesquita
em Haskell
• É uma linguagem de programação
funcional (isto é, tudo é feito com

O que é chamadas de funções), estática,


implicitamente tipada (ou seja, os
tipos são checados pelo

Haskell?
compilador, não sendo necessário
declará-los) e “preguiçosa” (nada
é feito até que se precise).

Prof. Ricardo Mesquita 2


Quem criou?
• Linguagem nomeada em homenagem ao
lógico Haskell Brooks Curry, como uma
base para linguagens funcionais.

Haskell B. Curry (1900 - 1982)

Prof. Ricardo Mesquita 3


• A linguagem Haskell é baseada no lambda
calculus.
• Obs: é um sistema formal que estuda

Qual a funções recursivas computáveis, no


que se refere a teoria da
computabilidade, e fenômenos

base do
relacionados, como variáveis ligadas e
substituição.
• Sua principal característica são as
entidades que podem ser utilizadas

Haskell? como argumentos e retornadas como


valores de outras funções.
• Open source.

Prof. Ricardo Mesquita 4


Uma linguagem funcional é constituída por
expressões, que são executadas por meio da
avaliação dessas expressões.
Mas... Qualquer um que já usou uma planilha
Como é a eletrônica, tem experiência em programação
funcional:
programação • Em uma planilha, especificamos o valor de cada célula,
funcional? em função dos valores de outras células.

O foco está em "o quê" deve ser computado,


e não "como" deve ser computado.

Prof. Ricardo Mesquita 5


Exemplo:
Considere uma planilha:

• não especificamos a ordem na qual as planilhas devem ser computadas, ao invés


disso, temos garantia de que a planilha será calculada em uma ordem que respeite
suas dependências.

• não dizemos à planilha como alocar sua memória - melhor, esperamos apresentar-nos
com um plano aparentemente infinito de células, e alocar na memória somente as
células que estão realmente em uso.

• na maioria das vezes, avaliamos o valor das células por uma "expressão" (cujas partes
podem ser avaliadas em qualquer ordem), melhor que por uma "seqüência de
comandos" que compute seu valor.

Prof. Ricardo Mesquita 6


Introdução ao Haskell
1. O bom e velho “Hello World”:
main = putStrLn “Modelos de Linguagens de Programação"

2. Vamos tentar outro:


m :: String
m = "Modelos de Linguagens de Programação"

main = putStrLn m

Prof. Ricardo Mesquita 7


Introdução ao Haskell
3. Entrada simples
main = print (2 + 5)

4. Função simples para somar dois números


add :: Int -> Int -> Int
add x y = x + y
n = add 5 6
main = print n

Prof. Ricardo Mesquita 8


Introdução ao Haskell
5. Um incremento diferente...
inc :: Int -> Int
inc = (\x -> \y -> x + y) 1
n = inc 4
main = print n

6. Outros exemplos:
inc :: Int -> Int inc :: Int -> Int inc :: Int -> Int inc :: Int -> Int
inc x = x + 5 inc x = (+) x 5 inc x = (+5) x inc = (5+)
n = inc 2 n = inc 2 n = inc 2 n = inc 2
main = print n main = print n main = print n main = print n

Prof. Ricardo Mesquita 9


Introdução ao Haskell
7. Vamos experimentar algumas funções:
quad :: Integer -> Integer
quad x = x ^ 2 bool1, bool2 :: Bool
n = quad 3 bool1 = True
main = print n bool2 = False
notBool :: Bool -> Bool
notBool b = if b == bool1
compNum :: Show a => a -> Int then bool2 else bool1
compNum x = length $ show x k = True
n = compNum 386787 n = notBool k
main = print n main = print n

Prof. Ricardo Mesquita 10


Introdução ao Haskell
num1 :: Num a => a
8. ...e mais algumas num1 = 1 + 5 + 7 + 3 + 2
num2 :: Num a => a
somaDe1a :: Integral a => a -> a num2 = num1 * num1
somaDe1a 0 = 0 main = print num2
somaDe1a x = x + somaDe1a (x - 1)
n = somaDe1a 5
main = print n n1 = succ 3
n2 = truncate 6.59
n3 = round 6.59
par :: Integral a => a -> Bool n4 = sqrt 2
par n = n `mod` 2 == 0 n5 = not (5 < 3)
n = par 5 n6 = gcd 21 14
main = print n main = do {print n1; print n2; print n3;
print n4; print n5; print n6}

Prof. Ricardo Mesquita 11


Dúvidas?

Prof. Ricardo Mesquita 12

Você também pode gostar