A Linguagem Haskell Claudio Cesar de Sá

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Departamento de Informática Universidade Federal do Espírito Santo
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi Wandekoken 2010/1.
Desenvolvimento de Plug-ins Orientado a Testes
Linguagem de Programação I
Introdução à Ciência da Computação Linguagens de Programação.
Paulo Marques Hernâni Pedroso
Curso: Banco de Dados I Análise de Sistemas PUC Campinas
Capítulo 1 Introdução.
Sistema para Criação e Testes de Modelos Formais
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Introdução (Informal) à Programação
1 Introdução (Informal) à Programação DI/FCT/UNL 1º Semestre 2004/2005.
ELEMENTOS DA INFORMÁTICA
Software Básico Silvio Fernandes
PRDS - Programa de Residência em Desenvolvimento de Software Laboratório de Engenharia de Software (LES) da PUC-Rio Carlos Lucena
April 05 Prof. Ismael H. F. Santos - 1 Modulo II CheckStyle Professor Ismael H F Santos –
INTRODUÇÃO À PROGRAMAÇÃO
Rafael Pinto Frederico Corrêa
Funções em C Universidade do Estado de Santa Catarina
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Curso Sistemas de Informação I Disciplina: Arquitetura de Software
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Rodrigo de Toledo IM/DCC
Luiz A. M. Palazzo Pelotas, maio de 2010
Paradigmas da Programação – Semestre 1 - Aula 1
Curso de Programação em C++
Aula 3 Evolução da Principais Linguagens
Laboratório de Programação de Computadores I
Introdução a Programação JAVA
Universidade do Vale do Rio dos Sinos
Otavio Bergmann e Raphael Miollo Parte 2 – Investigação e apresentação.
Paradigmas de programação
Linguagem Haskell Riocemar S. de Santana.
JAVA: Conceitos Iniciais
PROGRAMAÇÃO I UNIDADE 1.
Programação Avançada Prof. Natalia Castro Fernandes
Flávio Melo Gabriel Fornari
Haskell.
Tópicos de Sistemas de Informação A
Listas: Haskell x Prolog
Programação Funcional
Tipos de Dados Paradigmas de Programação
Estudo dos Conceitos e Paradigmas de Programação
Paradigmas de Linguagens de Programação
Paradigma Funcional Apresentação de LF1.
Paradigmas de Programação
Centro de Informática – UFPE
1.
DC - UFC Copyright © 2003 Misael Santos e Rossana Andrade 1 Padrões de Projeto para Sistemas Web Misael Santos e Rossana Andrade Universidade.
Linguagem de Programação - III Ementa: Uma linguagem com o paradigma funcional (LF: Linguagem Funcional) Conteúdo: Contexto das Linguagens, Histórico de.
02/08/2011 Professor Leomir J. Borba- –
Banco de Dados Parte 04 Ceça. Ceça Moraes 2 Conteúdo  Os três níveis da arquitetura  Mapeamentos  Arquitetura cliente-servidor.
Lógica Estruturada Aplicada
Paradigma funcional.
Paradigmas de Linguagens de Programação Aula 2
Paradigmas de Linguagens de Programação
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 1 – Profª Danielle Costa
Programação Funcional
Linguagens de Programação Introdução Prof. Renato Melo.
Programação Lógica com Prolog
Programação Funcional 9a. Seção de Slides Entradas e Saídas, Sequência de Ações em Haskell (Estudo de Casos)
Haskell Programação Funcional Diego Lima Rubem Moreira.
Compiladores – IF688 Professor: André Santos
SISTEMAS DE INFORMAÇÃO
Evolução das Principais Linguagens de Programação
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
Influencias sobre o Projeto da Linguagem
Módulo I – Softwares: Linguagens de Programação Prof.: Rogério Morais.
Transcrição da apresentação:

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/ Seminco – 2006 Blumenau - SC

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

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

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

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

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

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

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

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

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

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 1.4142135623731 Seminco – 2006 Blumenau - SC x y

Interpretadores e Compiladores GHC nhc98 HBC / HBI Hugs www.haskell.org/implementations.html Seminco – 2006 Blumenau - SC

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) 1994-2003 ||---|| ___|| World Wide Web: http://haskell.org/hugs || || Report bugs to: hugs-bugs@haskell.org || || Version: Nov 2003 _______________________________________________ Type :? for help Prelude> O prompt. O Hugs está pronto para uma entrada Seminco – 2006 Blumenau - SC

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

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

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) < 0.000001 Main> 3 ~== 4 False Seminco – 2006 Blumenau - SC

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

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

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

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

Executando.... Cavalos> imp_cavalo (append horse (vira_V horse)) .......##... .....##..#.. ...##.....#. ..#.......#. ..#...#...#. ..#...###.#. .#....#..##. ..#...#..... ...#...#.... ....#..#.... .....#.#.... ......##.... ...##....... ..#..##..... .#.....##... .#.......#.. .#...#...#.. .#.###...#.. .##..#....#. .....#...#.. ....#...#... ....#.#..... ....##...... ................. Cavalos> Seminco – 2006 Blumenau - 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 Seminco – 2006 Blumenau - 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 Seminco – 2006 Blumenau - SC

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

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

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

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

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

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

Referências 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 Seminco – 2006 Blumenau - SC

Muito Obrigado ! Seminco – 2006 Blumenau - SC