haskell - introdução

Download Haskell - Introdução

Post on 09-Feb-2017

49 views

Category:

Education

0 download

Embed Size (px)

TRANSCRIPT

  • UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CINCIA DA COMPUTAO

    PROGRAMAO DECLARATIVA 2016.2

    Fbio M. Pereira

    (fabio.mpereira@uesb.edu.br)

  • Roteiro

    Linguagens de Programao

    Funes Matemticas e Programao

    O Que Programao Funcional?

    Vantagens da Programao Funcional

    Desvantagens

    Programando por Funes

    Implementaes

    Comandos Bsicos no GHCi

  • Linguagens de Programao

    Um programa uma sequncia lgica de tarefas, destinada computadores

    Uma linguagem de programao usada para escrever programas: Diretamente em cdigo de mquina

    Em uma linguagem de baixo nvel

    Em uma linguagem de alto nvel

    O compilador converte um programa em linguagem de alto nvel para linguagem de mquina

  • Linguagens de Programao

    Cdigo de mquina:

    Baixo nvel:

    Alto Nvel:

    00101011 2B

    01101111 6F

    ORG $400

    MOVE.B Value1,D0

    MOVE.B Value2,D1

    ADD.B D0,D1

    MOVE.B D1,Result

    STOP #$2700

    program Teste;

    var Nome: String;

    begin

    write('Nome: ');

    readln(nome);

    writeln('Nome lido do teclado: ',nome);

    readln;

    end.

  • Funes Matemticas

    Define um mapeamento de um domnio de valores para uma faixa de valores

    Conjunto de pares ordenados que relaciona cada elemento de um domnio com um elemento correspondente em uma faixa (contradomnio)

    O valor de uma funo no depende de conceitos como ordem de execuo

    Variveis no mudam de valor

  • Representam Funes Matemticas?

  • Definio de Funo

    Dados dois conjuntos A e B no vazios, uma funo de A em B uma relao que associa a cada elemento x A, um nico elemento y B

    Assim, uma funo liga um elemento do domnio (conjunto A de valores de entrada) com um segundo conjunto, o contradomnio (conjunto B de valores de sada) de tal forma que a cada elemento do domnio est associado exatamente a um, e somente um, elemento do contradomnio

    O conjunto dos elementos do contradomnio que so relacionados pela f a algum x do domnio o conjunto imagem, denotado por Im(f)

  • Qual a Funo?

    f(x) = x2

    Dom (f) = {-3, -2, -1, 0} CD (f) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Im (f) = {0, 1, 4, 9}

  • Quais Diagramas Representam Uma Funo de A em B?

    (a) (b)

    (c) (d)

  • Funes Matemticas e Programao

    Simplificando, uma funo uma regra para mapeamento (ou associao) de membros de um conjunto (o conjunto domnio) para outro (contradomnio)

    Exemplo: a funo quadrado deve mapear elementos do conjunto de nmeros inteiros para o conjunto de nmeros naturais

    A definio de uma funo composta de duas partes

    Assinatura: especifica o domnio e o contradomnio

    Regra de mapeamento: especifica o valor do contradomnio associado com cada valor do domnio

  • Funes Matemticas e Programao

    Exemplo

    square : integer natural (assinatura)

    square(n) n x n (regra de mapeamento)

    ( definida por)

    n (parmetro)

    square(2) resulta no valor 4, onde 2 o argumento

    n uma varivel matemtica, que diferente de uma varivel de programao o seu valor no muda

  • Funes Matemticas e Programao

    Novas funes podem ser criadas pela combinao de funes

    Composio de funes: F G o H A aplicao de F equivalente a aplicao de H e a aplicao de G ao

    resultado

    Em Linguagens Imperativas a funo definida de forma procedural

    Em Funes Matemticas a funo definida de forma aplicativa ou declarativa

    A regra de mapeamento definida em termos de combinaes e aplicaes de outras funes

  • Funes Matemticas e Programao

    Muitas Funes Matemticas so definidas recursivamente A definio da funo contm uma aplicao dela mesma

    Fatorial de um nmero n! if n=0 then 1 else n*(n-1)!

    Funo de naturais para booleanos que determina se um nmero primo primo(n) if n=2 then true else p(n, n div 2)

    p(n,i) if (n mod i) = 0 then false

    else if i=1 then true else p (n, i-1)

    Qual a funo de naturais para booleanos que determina se um nmero par?

  • Resumindo, O Que Programao Funcional?

    C, Java, Pascal, Ada, ..., so linguagens imperativas

    Consiste de uma sequncia de comandos que so executados estritamente um aps o outro

    Haskell uma linguagem funcional

    Um programa funcional uma nica expresso, que executada pela avaliao da expresso

    Planilha eletrnica: o valor de cada clula calculado em funo dos valores de outras clulas

    Foco em o que dever ser computado, e no em como dever ser computado.

  • O Que? X Como?

    Em uma planilha eletrnica:

    No especificamos a ordem na qual as clulas devem ser calculadas: a planilha ir automaticamente computar as clulas em uma ordem que respeite as suas dependncias

    No dizemos a planilha como alocar memria: ela nos apresenta um plano aparentemente infinito de clulas

    Na maioria das vezes, especificamos o valor de uma clula atravs de uma expresso em vez de usarmos uma sequncia de comandos

  • Vantagens da Programao Funcional

    Programas muito mais concisos que os seus equivalentes em linguagem imperativa (2-10 vezes)

    Fcil entendimento: voc capaz de entender o programa sem qualquer conhecimento prvio da linguagem

    uma linguagem fortemente tipada, evitando erros de programao

    Sistema de tipos menos restritivo (polimorfismo): reuso de cdigo

    Funes de alta-ordem: abstrao poderosa Gerenciamento interno de memria

  • Vantagens da Programao Funcional

    qsort [] = []

    qsort (x:xs) =

    qsort elts_lt_x ++ [x] ++ qsort elts_greq_x

    where

    elts_lt_x = [y | y = p))

    h = h-1;

    if (l < h) {

    t = a[l];

    a[l] = a[h];

    a[h] = t;

    }

    } while (l < h);

    t = a[l];

    a[l] = a[hi];

    a[hi] = t;

    qsort( a, lo, l-1 );

    qsort( a, l+1, hi );

    }

    }

  • Desvantagens

    Programas escritos em linguagens imperativas, como C por exemplo, so geralmente mais rpidos e usam menos memria que programas em Haskell Em aplicaes onde a performance fundamental, uma

    linguagem imperativa seria uma melhor escolha que Haskell

    C oferece maior controle sobre o modo exato como a computao realizada

  • Programando por Funes

    areaCirculo r = pi*r^2

    quadrado x = x * x

    maior x y

    | x >= y = x

    | otherwise = y

  • Programando por Funes

    fatorial 1 = 1

    fatorial n = n * fatorial (n-1)

    f x = 2 * x + 4

  • Implementaes

    Hugs

    Exclusivamente um interpretador, implementa quase todo o padro Haskell 98 e algumas extenses

    Escrito em C, funciona em quase todas as plataformas

    Possui uma biblioteca grfica

    ltimo release: maio/2006 (sem manuteno)

    https://www.haskell.org/hugs/

    https://www.haskell.org/hugs/https://www.haskell.org/hugs/

  • Implementaes

    GHC

    tanto um interpretador como um compilador

    O ambiente interativo mais lento que Hugs, mas permite definio de funes no ambiente (em Hugs deve-se colocar em um arquivo)

    Implementa o Haskell 2010

    Bom suporte a interface com outras linguagens

    Possui interface grfica

    ltimo release: dezembro/2014

    https://www.haskell.org/downloads

  • Implementaes

    NHC

    apenas um compilador

    Produz executvel menor e mais rpido que GHC98

    D suporte ao Haskell 98 e algumas extenses

    Sem manuteno

    UHC

    Implementao da Utrecht University

    D suporte ao Haskell 98 e algumas extenses

    JHC

    Compilador experimental com o objetivo de testar novos mtodos de otimizao

  • Haskell GUIs

    Haskell possui pelo menos quatro kits de ferramentas para programao de interface grfica:

    wxHaskell fornece uma interface Haskell para o kit de ferramentas multi-plataformas wxWidgets com suporte a Windows, OS X, e Gtk+ no GNU/Linux, dentre outros

    Gtk2Hs fornece uma interface Haskell para a biblioteca GTK+

    hoc fornece uma ponte Haskell para Objective-C que permite a usurios acessarem a biblioteca Cocoa no MacOS X

    qtHaskell fornece um conjunto de pontes Haskell para a Qt Widget Library da Nokia

  • Comandos Bsicos no GHCi

    Ao executar o GHCi, uma sesso iniciada

    O sistema carrega funes pr-definidas (Prelude.hs) e passa a esperar comandos:

  • Comandos Bsicos no GHCi

    Exemplo de Interao, digitando expresses:

  • Alguns Comandos Importantes

    :? imprime a lista de todos os comandos

    :q abandona o interpretador

    :load carrega definies a partir de um arquivo

    :e chama o editor

    :e exemplo1.hs editar o arquivo exemplo1.hs

    :l exemplo1.hs carregar o arquivo exemplo1.hs

    :a exemplo2.hs carregar o arquivo exemplo2.hs

    :r recarrega um arquivo modificado

    :m + nomeModulo carrega mdulo (biblioteca) para a memria

    :m nomeModulo remove mdulo da memria

    :! comando executar um comando do sistema operacional;

    :set visualiza configuraes do GHCi (:s +t)

  • Operaes Aritmticas

    Soma (+), subtrao (-), multiplicao (*), diviso (/), exponenciao (^) e raiz quadrada (sqrt)

    Agora tente calcular 2^5000 (ir funcionar?)

  • Operaes Aritmticas

  • UNI