Rafael Pinto Frederico Corrêa

Slides:



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

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Curso de aprofundamento na linguagem C
Programação Orientada a Objetos*
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Paulo Marques Hernâni Pedroso
JavaScript O JavaScript é uma linguagem de scripting, orientada a objectos e independente de plataformas Criada pela NetScape Código embebido em paginas.
Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Orientação a Objetos: Encapsulamento e Classificação
Orientação a Objetos: Encapsulamento e Classificação
Linguagens de Programação Orientadas a Objetos
Programação Básica em Java
LPG - I: Alocação Dinâmica de Memória - Ponteiros
7 Abstração Genérica Unidades genéricas e instanciação.
8 Sistemas de Tipos Polimorfismo de inclusão.
Paradigmas da Programação
Linguagem C.
Laboratório de Programação de Computadores I
Delphi Disciplina de Programação Visual 2/Linguagem de Banco de dados – QI – Aula1 Prof. Luciano Monteiro.
Revisão da Linguagem C.
Introdução a Programação JAVA
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Paradigmas de programação
João Lucas de Oliveira Torres
Análise Semântica e Representação Intermédia
Aula prática 13 Orientação a Objetos – C++ Parte 1
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Conceitos de Linguagem de Programação
Haskell.
Seminário 1: Revisão de C
Haskell Programação Funcional
Organização do Ambiente de Execução (Runtime System)
Tipos de Dados Paradigmas de Programação
Estudo dos Conceitos e Paradigmas de Programação
©André Santos, Programação Funcional Classes em Haskell André Santos.
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Expressões e Instrução de Atribuição
Organização do Ambiente de Execução (Runtime system) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos.
Paradigma Funcional Apresentação de LF1.
Centro de Informática – UFPE
Operadores e Atribuições Capítulo 3
Programação em C++ Compiladores
Paradigmas de Linguagens de Programação Aula 2
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Modelos de Linguagem de Programação I Aula 06
Algumas notas sobre a linguagem de programação C
Programação Orientada a Objetos - Java
UTILIZAÇÃO DA LINGUAGEM MS-VISUAL BASIC.NET Objetivo: apresentar os principais recursos da linguagem “Visual Basic” necessários à criação de macros para.
Programação Funcional
Tipos de dados inteiro caracter real logico
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
George Darmiton da Cunha Cavalcanti
Linguagens Funcionais: Haskell Prática 1 Paradigmas de Linguagens Computacionais Monitor: Guilherme Moura
Funções como Valor ©André Santos e Marcelo d’Amorim.
Haskell Programação Funcional Diego Lima Rubem Moreira.
Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Introdução Estrutura Léxica Declarações.
©André Santos, Programação Funcional Tipos Algébricos André Santos.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
Smalltalk Artur Lira Diego Lemos Lucas Figueiredo Thiago Rocha.
Haskell (é uma função polimorfica) Laboratório Rafael Borges
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
VARIÁVEIS Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
©André Santos, Programação Funcional André Santos.
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

Rafael Pinto Frederico Corrêa HASKELL Rafael Pinto Frederico Corrêa

Origem Haskell é uma linguagem puramente funcional, de propósito geral cujo nome vem do lógico Haskell Brooks Curry, criador de um trabalho em lógica que serviu de base para as linguagens funcionais. Foi criada em 1988 por um comitê de 15 membros para satisfazer, entre outros, os seguintes objetivos:

Objetivos Deve ser aceitável para ensino, pesquisa e aplicações, incluindo grandes sistemas. Deve ser disponibilizada gratuitamente. Deve ser baseada em idéias que satisfaçam um grande consenso (por isso o comitê). Deve reduzir a diversidade desnecessária nas linguagens funcionais (visa ser um padrão).

Execução Existem diversas implementações da linguagem Haskell, incluindo interpretadores (Hugs) e compiladores (GHC , nhc98).

Portalibidade Além de possuir diversas implementações, cada uma delas está disponível para diversos sistemas operacionais, podendo gerar executáveis para várias plataformas. Outra alternativa está no interpretador Hugs. Deve-se, porém, observar o uso de bibliotecas específicas para determinados sistemas operacionais (como a biblioteca Windows).

Tipos de Dados Tipos primitivos: Integer (tamanho arbitrário) Int Float Double Bool Char

Tipos de Dados Tipos estruturados: Tuplas (structs) Ex.: circulo1 = (azul,15) Listas (arrays) Ex.: pares [0,2,4,6..]

Sinônimos É possível definir sinônimos de tipos. Exemplo: type String = [Char] type Person = (Name, Address) type Name = String

Tipagem Haskell apresenta tipagem dinâmica, as variáveis não precisam ser explicitamente declaradas e seu tipo pode ser inferido a partir do contexto. Ex.: print x Haskell sabe que x deve ser um array de caracteres. Caso contrário, um erro de overloading é retornado (pois não há sobrecarga para o tipo utilizado).

Tipos Customizados É possível criar novos tipos com declarações 'data'. Exemplos: data Bool = True | False data Color = Red | Green | Blue | Indigo | Violet data Natural = [0,1,2..]

Precedência e Associatividade Haskell faz associatividade pela esquerda, funções possuem precedência sobre operadores: "f x y + g a b" é "parseado" como "((f x) y) + ((g a) b)"

Encapsulamento e Proteção Where: possibilitam a declaração de funções locais. Data: abstração de dados. Funções de ordem mais alta: possibilitam a criação de funções a partir de partes de outras funções. Ex.: 'member' é uma função tal que 'member x a' retorna verdadeiro se a está na lista x. vogal = member ['a','e','i','o','u'] Omitindo o segundo parâmetro de member, criou-se a função 'vogal a' de maior ordem.

Polimorfismo Há polimorfismo universal, a função possui um tipo genérico e a mesma definição é usada para vários tipos. O mesmo código é reusado e reaplicado a cada versão da função. Uma função qualquer de ordenamento com o mesmo nome poderia ordenar um vetor de inteiros, números em ponto-flutuante, ou um vetor de caracteres (string) sem problemas.

Tratamento de Erros Através da função 'error' e nas próprias definições de funções. Ex.: fac n | n < 0 = error "input to fac is negative" | n == 0 = 1 | n > 0 = product [1..n] Não existe nenhum tratamento mais avançado para erros no módulo básico. Módulos que podem gerar erros (Ex.: I/O), trazem funções para tratá-los.

Avaliação de Expressões Haskell possui um método de avaliação de expressões chamado 'lazy evaluation', que apenas avalia o valor de expressões quando realmente necessário. Isso permite construções interessantes: fibs = 0 : 1 : [ a + b | (a, b) <- zip fibs (tail fibs)] é uma lista com os números de Fibonacci. Ex.: "fibs !! 20" retorna o vigésimo número de Fibonacci. Note que fibs é uma lista potencialmente infinita!

Variações GPH, Glasgow Parallel Haskell: variação de Haskell com estruturas para diferenciar construções paralelas (par) de seqüenciais (seq). O'Haskell: Versão (mais) orientada a objetos de Haskell.

Exemplo where qsort [] = [] qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] Explicando: a função qsort, em ambas implementações, trabalha sobre listas. Na primeira, uma lista vazia, retorna uma lista vazia. Na segunda, chama o primeiro elemento de x e o resto de xs. Chama qsort nos elementos menores que x, concatena isso com x (pivô) e concatena com os maiores ou iguais a x.

Para Humilhar... Agora com 1 linha (se conseguirem enxergar): qsort a | (a == []) = [] | (a /= []) = qsort [y | y <- tail a, y < head a] ++ [head a] ++ qsort [y | y <- tail a, y >= head a]

Bibliografia The Haskell Home Page: www.haskell.org Haskell Reference: www.zvon.org/other/haskell/Outputglobal/