A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

A Linguagem Haskell Claudio Cesar de Sá

Apresentações semelhantes


Apresentação em tema: "A Linguagem Haskell Claudio Cesar de Sá"— Transcrição da apresentação:

1 A Linguagem Haskell Claudio Cesar de Sá
Grupo de Computação Cognitiva Aplicada (COCA) Universidade do Estado de Santa Catarina (UDESC) Seminco – 2006 Blumenau - SC

2 Agenda O que é uma Linguagem de Programação Os Paradigmas das LPs
Histórico e contexto do Haskell Características Exemplos Aplicações O livro: Haskell: Uma Abordagem Prática Referências Seminco – 2006 Blumenau - SC

3 Linguagem de Programação
O Propósito das Linguagens de Programação: (O que é uma linguagem de programação?) “Abstração de uma máquina virtual” “Programar é a arte de contar a outro humano aquilo que se quer que o computador faça.” Linguagem de Programação Seminco – 2006 Blumenau - SC

4 Paradigmas de Linguagens de Programação
IMPERATIVAS: C, Basic, Assembler, Fortran, Cobol, FUNCIONAIS: Lisp, Miranda, Scheme, Comoom Lisp, Haskell, ML,... LÓGICAS: Prolog e derivados ORIENTADAS A OBETOS: Smalltalk, ... HÍBRIDAS: C++ Builder, Java, Delphi, Kylix, ... ESPECÍFICAS: GPSS, Simula, Auto-Lisp, ... BASEADAS EM REGRAS de PRODUÇÃO: CLIPS, Jess, ... Shell de SE’s... SEBESTA ,Robert W. Concepts of Programming Languages. 4 ed. Addison Wesley, 1999. Seminco – 2006 Blumenau - SC

5 Qual linguagem a ser ensinada?
Imperativas ou procedurais Funcionais C++ Cobol ML Haskell C Visual C++ Erlang Scheme Assembler Java Fortran Visual Basic Seminco – 2006 Blumenau - SC

6 Evolução: Genealogia Seminco – 2006 Blumenau - SC Prolog
SWI-Prolog Python 91 (from Modula-3 and ABC 87?). Python 2 influenced by Perl and functional programming. Haskell From Sebesta’s Concepts of Programming Languages Seminco – 2006 Blumenau - SC

7 Histórico do Haskell Origem do nome: Haskell Brooks Curry
Criado pelo comitê da conferência de FPCA em, 1987 Necessidade de uma linguagem puramente funcional, “padrão”, sem restrições de uso, … Uma versão consolidada: Haskell 98 Uma LP projetada (~ 10 anos) Seminco – 2006 Blumenau - SC

8 Porquê do Haskell? Haskell é uma linguagem de muito alto-nível (muitos detalhes são tratados automaticamente) Haskell tem uma boa expressividade e concissão (muita coisa com pouco esforço) Haskell é eficiente no tratamento de dados complexos e na combinação de componentes Em contra-partida, Haskell não tem um altíssimo desempenho em termos de LP, pois prioriza o tempo do programador em relação ao da CPU! Seminco – 2006 Blumenau - SC

9 Objetivos do Projeto da Linguagem Haskell:
Apropriada ao ensino de programação, pesquisas, e aplicações (reais) Descrição completa e aberta de sua sintaxe e semântica forma Código livre e multi-plataforma As idéias fundamentais do Haskell, deveria ser um consenso da comunidade Reduzir a diversividade do número de LP funcionais Escalabilidade Seminco – 2006 Blumenau - SC

10 Características: Legibilidade
Rápido aprendizado: conceito elementar de funções (ensino médio) Análoga a ML, e outras LPs funcionais Motivar o estudo do Lambda Cálculo. Haskell é 100% Cálculo Lambda Módulos permitem um crescimento linear dos projetos com Haskell Seminco – 2006 Blumenau - SC

11 Casamento de padrões: x e y
Um Exemplo: Teorema de Pitagoras: hipot :: Float -> Double hipot x y = sqrt (x*x + y*y) Casamento de padrões: x e y (Pattern matching) Main> hipot 1 1 Seminco – 2006 Blumenau - SC x y

12 Interpretadores e Compiladores
GHC nhc98 HBC / HBI Hugs Seminco – 2006 Blumenau - SC

13 O prompt. O Hugs está pronto para uma entrada
O Interpretador Hugs Iniciando o hugs Haskell: > hugs __ __ __ __ ____ ___ _______________________________________________ || || || || || || ||__ Hugs 98: Based on the Haskell 98 standard ||___|| ||__|| ||__|| __|| Copyright (c) ||---|| ___|| World Wide Web: || || Report bugs to: || || Version: Nov _______________________________________________ Type :? for help Prelude> O prompt. O Hugs está pronto para uma entrada Seminco – 2006 Blumenau - SC

14 Definindo uma função ”quase igual”
Definindo novos operadores com nome construído por símbolos x ~== y = x-y < Os argumentos x e y O qual retorna True se a diferença entre x e y for menor do que Definindo um novo operador ~== Seminco – 2006 Blumenau - SC

15 Executando a função/operador: ``~==´´
Main> 3 ~== True Main> 3~==4 OK Qual o erro? x ~== y = x-y < Seminco – 2006 Blumenau - SC

16 Consertando a definição
Uma função auxiliar Main> abs 3 3 Main> abs (-3) A função do valor absoluto x ~== y = abs (x-y) < Main> 3 ~== 4 False Seminco – 2006 Blumenau - SC

17 Premissa do código, e das funções a seguir:
type Picture = [[Char]] -- [String] horse :: Picture horse = [" ##...", ".....##..#..", "...##.....#.", "..# #.", "..#...#...#.", "..#...###.#.", ".#....#..##.", "..#...#.....", "...#...#....", "....#..#....", ".....#.#....", "......##...."] Seminco – 2006 Blumenau - SC

18 Combinando Funções Uma função para colocar uma figura sobre :
um_sobre_outro Seminco – 2006 Blumenau - SC

19 concatenação (duplica)
Mais código: um_sobre_outro :: Picture -> Picture -> Picture um_sobre_outro = (++) -- sem argumentos ou um_sobre_outro x = append x x Uma simples concatenação (duplica) da mesma lista....mesma figura... Uma após a outra.. append :: [a] -> [a] -> [a] append [ ] ys = ys append (x : xs) ys = x : append xs ys Seminco – 2006 Blumenau - SC

20 Executando.... Cavalos> imp_cavalo (um_sobre_outro horse)
##... .....##..#.. ...##.....#. ..# #. ..#...#...#. ..#...###.#. .#....#..##. ..#...#..... ...#...#.... ....#..#.... .....#.#.... ......##.... Cavalos> Seminco – 2006 Blumenau - SC

21 Executando.... Cavalos> imp_cavalo (append horse (vira_V horse))
##... .....##..#.. ...##.....#. ..# #. ..#...#...#. ..#...###.#. .#....#..##. ..#...#..... ...#...#.... ....#..#.... .....#.#.... ......##.... ...## ..#..##..... .#.....##... .# #.. .#...#...#.. .#.###...#.. .##..#....#. .....#...#.. ....#...#... ....#.#..... ....##...... Cavalos> Seminco – 2006 Blumenau - SC

22 Aplicações Simpósio Brasileiro de LPs => compiladores
Ensino: LPs, paradigmas de LPs, Estruturas de Dados, projeto de sistemas, prototipação, IA, Wiki-Haskell Suporte da BD Haskell.NET Seminco – 2006 Blumenau - SC

23 Um livro neste processo
:: uma disciplina de graduação que foi construída Alguns artigos na área de educação Várias disciplinas envolvidas Uma motivação, um grupo, uma atmosfera, uma novidade, as descobertas, as desconfianças, Um resultado: Seminco – 2006 Blumenau - SC

24 Capítulos Introdução Matemática Funcional
Uma Visão Funcional da Indução Tuplas Listas Tipos de Dados Classes Seminco – 2006 Blumenau - SC

25 Capítulos Lambda Cálculo Generalização Figuras Textos Vetores Árvores
Algoritmos de Ordenação Elementos Não-Funcionais Seminco – 2006 Blumenau - SC

26 Capítulos Entradas, Saídas e Seqüências de Ações Problemas
Reflexões Finais Ambientes de Programação Funções Complementares Seminco – 2006 Blumenau - SC

27 Uma editora: um projeto!
Um estudante Seminco – 2006 Blumenau - SC Uma editora: um projeto!

28 Uma idealização efetivada
Seminco – 2006 Blumenau - SC

29 Futuro A verticalização: aplicações e melhorias A comunidade se amplia
Seminco – 2006 Blumenau - SC

30 Referências Hudak, P. et al (2000) “A Gentle Introduction to Haskell Version 98” Jones, S.P. et al (1999) “The Haskell 98 Report” Winstanley, Noel (1999) “What the Hell are Monads?” Seminco – 2006 Blumenau - SC

31 Muito Obrigado ! Seminco – 2006 Blumenau - SC


Carregar ppt "A Linguagem Haskell Claudio Cesar de Sá"

Apresentações semelhantes


Anúncios Google