Haskell
Centro de Informática – UFPE
Roteiro
História
Paradigma
Utilização
Sintaxe
Implementação
Exemplos
Vantagens & Desvantagens
História
Desenvolvida em 1990 pelo FPAC
Haskell 1.0 - 1.4
Haskell 98 Report
Haskell-prime
Paradigma
Totalmente baseado em funções
Não existem atribuições (assignments) !
Lazy Evaluation
High-order Functions
Utilização
Jogos
Compiladores
IA (Problemas algébricos e lógica
proposicional)
Sintaxe
Trabalha-se somente com funções, seus
parâmetros e seus retornos
É case-sensitive
Não possui comandos de repetição como
While e For
Sem limites para identificadores
Sintaxe
Tipos Básicos
Bool(Booleano)
Int(Inteiro
limitado)
Integer(Inteiro ilimitado)
Float(Real)
Char(Caractere)
Sintaxe( Tipos Básicos )
Void
Tuplas
Listas
Funções
Sintaxe
Módulos
module Main where
main = putStrLn “Hello, World!”
Sintaxe
Funções
multiplica x y = x*y
Sintaxe
Listas
["Bob", "John"]
"Bob" : "John" : []
Sintaxe
:: (dois-pontos duplo)
5
'a‘
Inc
[1,2,3]
('b',4)
::
::
::
::
::
Integer
Char
Integer -> Integer
[Integer]
(Char,Integer)
Sintaxe
do
main = do putStr "You are? "
name <- getLine
greet name
Obs.: Utilização de layout (identação), substituindo os parênteses
Sintaxe
Recursão (simulação de loops)
printAll :: [String] -> IO ()
printAll []
= return ()
printAll (x:xs) = do putStrLn x
printAll xs
Sintaxe
Operador $
greet name = putStrLn $ greeting name
Sintaxe
If then else
greeting :: String -> String
greeting name =
if name = = "Haskell"
then "Hey, whadda ya know? This is a Haskell program!"
else "Hello, " ++ name ++ "!"
Sintaxe
Outros
case
Sobrecarregamento
ect,
etc...
(“Overloading”)
Implementação
Hugs
GHC
Nhc98
HBC
Helium
Jhc
Yhc
Implementação
Hugs
Interpretador
Escrito
em C
Portável
Leve
Ideal para iniciantes
Implementação
GHC
Interpretador
e Compilador
Escrito em Haskell
Menos portável
Mais lento
Exige mais memória
Produz programas mais rápidos
Exemplos
module Main where
main :: IO ()
main = do putStr “Qual é o seu nome? "
nome <- getLine
cumprimento nome
cumprimento :: String -> IO ()
cumprimento nome = putStrLn $ cumprimentar
nome
Exemplos
cumprimentar :: String -> String
cumprimentar nome =
if nome == "Haskell"
then “Opa, eu te conheço? Este é um
programa em Haskell!"
else if nome == “Java"
then “Boa linguagem"
else “Olá, " ++ nome ++ "!"
Vantagens
Fortemente Tipada e Estática
Avaliação Lazy
Polimorfismo Universal Paramétrico
Função (superior e parcial)
Ausência de variáveis globais e desvios
incondicionais
Desvantagens
Avaliação Lazy
Muita memória
Execução lenta
Dúvidas
Haskell
Centro de Informática - UFPE