Este documento discute o paradigma funcional usando a linguagem Haskell. Apresenta os tipos primitivos de Haskell como Int, Float e Char, e explica o tipo função que mapeia valores de entrada para saída. Demonstra como declarar funções de forma polimórfica para que possam operar em diferentes tipos. A inferência automática de tipos permite que o compilador determine o tipo de uma função sem que seja explicitamente declarado. Por fim, lista exercícios para praticar operações matemáticas e lógicas usando funções em Haskell.
3. Linguagem Haskell LinguagemFuncionalPura Implementações: GHC: Compilador; Utilização similar à compiladores de outraslinguagens. HUGS: Interpretada, facilita a aprendizagem; O programadorforneceaointerpretadorumaexpressão e estemostra o resultadodasuaavaliação.
4. Tipos da Linguagem Haskell TiposPrimitivos (Similares a Java): Int: Inteiro de 32 bits +, -, *, mod, div, ^; Integer: Inteirosemlimitação de tamanho Float +, -, *, /, ^; Char
5. Observação Em Haskell todosostiposcomeçam com letraMAIÚSCULA Todososnomesiniciados com letraminúsculassãonomes de funções.
6. Tipo Função Umafunçãocalcula um resultado a partir de um argumento: Porser umalinguagemfuncionalpura, em Haskell o resultadoproduzidoporumafunçãovariaapenasemfunçãovalores dos seusargumentos. Sintaxe: X -> Y Funçãoquerecebe um valor do tipo X e produz um valor do tipoY X -> Y -> Z Funçãoquerecebeargumentos dos tipos X e Y e produz um valor do tipo Z. Chamada de função: f x f x y
7. Programa Haskell dois:: Int -- tipodadeclaracao dois = 2 -- valor dadeclaracao f :: Int -> Int f x = x + 1 g :: Int -> Int -> Int g x y = x + 2*y
8. DeclaraçãoPolimórfica Motivação: Muitasfunçõesnãodependem de seustiposparaseremdefinidas. Exemplo: -- Funcaosegundovalor segI :: Int -> Int -> Int segI x y = y segF :: Float -> Float -> Float segF x y = y segC :: Char -> Char -> Char segC x y = y A definiçãodamesmafunçãoparaparadiferentestiposgeramuitaredundância de código.
9. Declaração Polimórfica Tipopolimórfico: Tipoquepode ser substituídoporqualqueroutrotipodalinguagem. Representadoporletrasminúsculas. Exemplo: seg :: a -> a -> a seg x y = y O tipopolimórfico “a” podesignificarqualquertipo real nalinguagem.
10. InferênciaAutomática de Tipos O programador Haskell não tem de definirostipos de todas as funçõesde um programa. Se elenãoespecificar o tipo de umafunção, o compilador/interpretadortentará “adivinhar” o tipo a partirdaanálise do corpo de declaração. Exemplo: f :: Int -> Int f x = x * 2 n x y = (f x) + (f y) Qual a assinaturadafunção ‘n’?
12. Exercícios Implementar operações básicas entre dois números (+, -, /, *); Implementar a média entre 4 números; Implementar programa para dizer se número é par; Implementar programa para dizer se número é ímpar; Implementar programa para encontrar o maior entre 3 números; Implementar programa para encontrar o menor entre 3 números; Para cada exercício acima, mostre o tipo das funções.