270 likes | 580 Views
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
E N D
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 :: 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 • Outros • case • Sobrecarregamento (“Overloading”) • ect, etc...
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
Haskell Centro de Informática - UFPE