seminco – 2006 blumenau - sc a linguagem haskell claudio cesar de sá grupo de computação...

31
Seminco – 2006 Blumenau - SC A Linguagem Haskell Claudio Cesar de Sá Grupo de Computação Cognitiva Aplicada (COCA) Universidade do Estado de Santa Catarina (UDESC) http://www2.joinville.udesc.br/~coca/

Upload: internet

Post on 17-Apr-2015

106 views

Category:

Documents


2 download

TRANSCRIPT

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

Seminco – 2006Blumenau - SC

A Linguagem Haskell

Claudio Cesar de Sá

Grupo de Computação Cognitiva Aplicada (COCA)

Universidade do Estado de Santa Catarina (UDESC)

http://www2.joinville.udesc.br/~coca/

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

Seminco – 2006Blumenau - SC

Agenda

1. O que é uma Linguagem de Programação

2. Os Paradigmas das LPs

3. Histórico e contexto do Haskell

4. Características

5. Exemplos

6. Aplicações

7. O livro: Haskell: Uma Abordagem Prática

8. Referências

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

Seminco – 2006Blumenau - SC

Linguagem de ProgramaçãoLinguagem 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.”

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

Seminco – 2006Blumenau - SC

Paradigmas de Linguagens de Programação

IMPERATIVAS: C, Basic, Assembler, Fortran, Cobol,FUNCIONAIS: Lisp, Miranda, Scheme, Comoom Lisp,

Haskell, ML,...LÓGICAS: Prolog e derivadosORIENTADAS 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.

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

Seminco – 2006Blumenau - SC

Qual linguagem a ser ensinada?

FuncionaisImperativas ou procedurais

C

C++

Visual C++

Visual BasicJava

Assembler

Fortran

Cobol

Haskell ML

Scheme Erlang

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

Seminco – 2006Blumenau - SC

Evolução: Genealogia

From Sebesta’sFrom Sebesta’s

Concepts of Concepts of

ProgrammingProgramming

LanguagesLanguages

HaskellHaskell

PrologProlog

SWI-PrologSWI-Prolog

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

Seminco – 2006Blumenau - SC

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)

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

Seminco – 2006Blumenau - SC

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!

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

Seminco – 2006Blumenau - SC

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

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

Seminco – 2006Blumenau - SC

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

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

Seminco – 2006Blumenau - SC

Um Exemplo:

Teorema de Pitagoras:

hipot :: Float -> Doublehipot x y = sqrt (x*x + y*y)

Main> hipot 1 11.4142135623731

x y

Casamento de padrões: x e y(Pattern matching)

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

Seminco – 2006Blumenau - SC

Interpretadores e Compiladores

• GHC

• nhc98

• HBC / HBI

• Hugs

• www.haskell.org/implementations.html

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

Seminco – 2006Blumenau - SC

O Interpretador Hugs

Iniciando o hugs Haskell:

> hugs__ __ __ __ ____ ___ _______________________________________________|| || || || || || ||__ Hugs 98: Based on the Haskell 98 standard||___|| ||__|| ||__|| __|| Copyright (c) 1994-2003||---|| ___|| World Wide Web: http://haskell.org/hugs|| || Report bugs to: [email protected]|| || Version: Nov 2003 _______________________________________________Type :? for helpPrelude>

O prompt. O Hugs está pronto para uma entrada

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

Seminco – 2006Blumenau - SC

Definindo uma função ”quase igual”

Definindo novos operadores com nome construído por símbolos

x ~== y = x-y < 0.000001

Definindo um novo operador

~==

Os argumentos x e y

O qual retorna True se a diferença entre x e y for menor do

que 0.000001

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

Seminco – 2006Blumenau - SC

Executando a função/operador: ``~==´´

Main> 3 ~== 3.0000001TrueMain> 3~==4True

OK

Qual o erro?

x ~== y = x-y < 0.000001

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

Seminco – 2006Blumenau - SC

Consertando a definição

• Uma função auxiliar

Main> abs 33Main> abs (-3)3

A função do valor absoluto

x ~== y = abs (x-y) < 0.000001

Main> 3 ~== 4False

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

Seminco – 2006Blumenau - SC

Premissa do código, e das funções a seguir:

type Picture = [[Char]] -- [String]

horse :: Picture

horse = [".......##...", ".....##..#..", "...##.....#.", "..#.......#.", "..#...#...#.", "..#...###.#.", ".#....#..##.", "..#...#.....", "...#...#....", "....#..#....", ".....#.#....", "......##...."]

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

Seminco – 2006Blumenau - SC

Combinando Funções

Uma função para colocar uma figura sobre :

um_sobre_outro

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

Seminco – 2006Blumenau - SC

Mais código:

um_sobre_outro :: Picture -> Picture -> Pictureum_sobre_outro = (++) -- sem argumentosouum_sobre_outro x = append x x

Uma simples concatenação (duplica) da mesma lista....mesmafigura... Uma após a

outra..

append :: [a] -> [a] -> [a]append [ ] ys = ysappend (x : xs) ys = x : append xs ys

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

Seminco – 2006Blumenau - SC

Executando....Cavalos> imp_cavalo (um_sobre_outro horse).......##........##..#.....##.....#...#.......#...#...#...#...#...###.#..#....#..##...#...#........#...#........#..#.........#.#..........##...........##........##..#.....##.....#...#.......#...#...#...#...#...###.#..#....#..##...#...#........#...#........#..#.........#.#..........##.....................

Cavalos>

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

Seminco – 2006Blumenau - SC

Executando....Cavalos> imp_cavalo (append horse (vira_V horse)).......##........##..#.....##.....#...#.......#...#...#...#...#...###.#..#....#..##...#...#........#...#........#..#.........#.#..........##.......##.........#..##......#.....##....#.......#...#...#...#...#.###...#...##..#....#......#...#......#...#.......#..#........#.#.........##.......................Cavalos>

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

Seminco – 2006Blumenau - SC

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

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

Seminco – 2006Blumenau - SC

Um livro neste processo

• http://br.geocities.com/lpg3udesc/ :: 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:

http://www2.joinville.udesc.br/~coca/index.php/Main/PaginaDoLivroDeHaskell

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

Seminco – 2006Blumenau - SC

Capítulos

1. Introdução

2. Matemática Funcional

3. Uma Visão Funcional da Indução

4. Tuplas

5. Listas

6. Tipos de Dados

7. Classes

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

Seminco – 2006Blumenau - SC

Capítulos

8. Lambda Cálculo

9. Generalização

10. Figuras Textos

11. Vetores

12. Árvores

13. Algoritmos de Ordenação

14. Elementos Não-Funcionais

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

Seminco – 2006Blumenau - SC

Capítulos

15. Entradas, Saídas e Seqüências de Ações

16. Problemas

17. Reflexões Finais

A. Ambientes de Programação

B. Funções Complementares

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

Seminco – 2006Blumenau - SC

Um estudante

Uma editora: um projeto!

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

Seminco – 2006Blumenau - SC

Uma idealização efetivada

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

Seminco – 2006Blumenau - SC

Futuro

• A verticalização: aplicações e melhorias• A comunidade se amplia

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

Seminco – 2006Blumenau - SC

• Hudak, P. et al (2000) “A Gentle Introduction to Haskell Version 98” http://www.haskell.org/tutorial

• Jones, S.P. et al (1999) “The Haskell 98 Report” http://www.haskell.org/onlinereport

• Winstanley, Noel (1999) “What the Hell are Monads?” http://www.dcs.gla.ac.uk/~nww/Monad.html

• http:// www.haskell.org• http://www2.joinville.udesc.br/~coca/index.php/Main/

PaginaDoLivroDeHaskell

Referências

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

Seminco – 2006Blumenau - SC

Muito Obrigado !