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