Upload
internet
View
121
Download
1
Embed Size (px)
Citation preview
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ásicosBool(Booleano) Int(Inteiro limitado) Integer(Inteiro ilimitado)Float(Real)Char(Caractere)
Sintaxe( Tipos Básicos )
VoidTuplasListasFunçõ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 :: Integer
'a‘ :: Char
Inc :: Integer -> Integer
[1,2,3] :: [Integer]
('b',4) :: (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
OutroscaseSobrecarregamento (“Overloading”)ect, etc...
Implementação
Hugs GHC Nhc98 HBC Helium Jhc Yhc
Implementação
Hugs InterpretadorEscrito em CPortávelLeve Ideal para iniciantes
Implementação
GHC Interpretador e CompiladorEscrito em HaskellMenos portávelMais lentoExige mais memóriaProduz 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