Buscar

Haskell Final SG

Prévia do material em texto

Haskell 
Uma Linguagem Funcional 
UNIVERSIDADE FEDERAL DOS VALES DO JEQUITINHONHA E MUCURI 
DIAMANTINA – MINAS GERAIS 
Sistemas de Informação – FACET/UFVJM 
 
Diamantina, 13 de Agosto de 2016. 
Vinicius Ribeiro 
 Tâmela Freitas 
Sumário 
• Introdução 
• História 
• Paradigma de Programação 
• Utilização 
• Sintaxe 
• Especificação 
• Implementação 
• Ambientes de Desenvolvimento 
• Exemplos de Programas 
• Vantagens e Desvantagens 
• Conclusões 
• Referências 
 
2 
Introdução 
• Atualmente no mercado, diversos são paradigmas utilizados 
na programação, e consequentemente diversas também são 
as linguagens de programação existentes pra suprir diferentes 
necessidades. 
 
• O foco desse trabalho é a linguagem Haskell, desenvolvida 
especificamente para programação em paradigma funcional . 
 
• A Haskell foi desenvolvida para uso em diversos tipos de 
aplicações. Tanto para lecionar como para desenvolvimento de 
produtos de softwares comerciais 
 
• O propósito inicial da linguagem era ter uma proposta de ser 
aberta e disponível a qualquer um livremente.. 
3 
História 
• Tudo começou por volta de 1930 quando os matemáticos 
Stephen Kleene e Alonzo Church apresentaram o λ-cálculo, 
que seria uma teoria de funções, que tinha intensão de 
fundamentar teoricamente as linguagens de programação 
funcional. 
 
• Baseado no λ-cálculo, em 1985 foi apresentada a linguagem 
Miranda. A primeira linguagem de programação Funcional. 
 
• Era muito eficiente, mas não tinha um livre domínio. 
 
• Com o sucesso de Miranda, começaram a emergir inúmeras 
outras linguagens funcionais e o mercado começou a ficar 
poluído. 
4 
História 
• Para criar um padrão que fosse aberto para as linguagens 
funcionais, foi realizada em Oregon nos EUA, em setembro de 
1987, uma conferência nomeada como Linguagens de 
Programação Funcional e Arquitetura de Computadores. (FPCA 
‘87). 
 
• Em 1988, finalmente definiram algumas primeiras metas da 
linguagem. A linguagem seria de fácil ensino, deveria ser escrita 
completamente baseada em sintaxe e semântica formais, além 
de ter livre disponibilidade. 
 
• Seu nome foi dado em homenagem ao matemático Haskell Curry. 
 
• Hoje ainda a universidade de Yale administra e estuda a 
linguagem. 
5 
 
Paradigma de Programação 
 
• A linguagem Haskell é completamente baseada no paradigma de 
programação funcional. 
 
• O objetivo do projeto de uma linguagem de programação 
funcional é imitar na programação o comportamento das funções 
matemáticas, ao máximo possível. 
 
• A primeira linguagem de programação funcional foi criada para 
oferecer recursos de linguagem para processamento de listas, 
nas primeiras aplicações da área de inteligência artificial. 
 
• Principal motivação para linguagens baseadas em paradigmas 
funcionais, foi o começar a ter processos mais simples e baratos 
para criação e manutenção de sistemas de maior porte. 6 
Paradigma de Programação 
• No modelo de paradigma funcional qualquer código vai ser 
escrito estruturado na forma de um conjunto de funções 
sendo definidas e recebendo valores os quais o usuário vai 
aplicar. Enquanto isso, no modelo do paradigma imperativo, o 
código é composto por um segmento de instruções capazes de 
mudar células na memória, durante sua execução. 
 
• Peculiaridades de uma linguagem puramente baseada no 
paradigma funcional são facilmente notadas, como por 
exemplo, a não alocação de forma explícita de memória, nem 
declaração explícita de variáveis, ou a ausência de laços. 
7 
Utilização 
• Uma das grandes vantagens da programação funcional, é com 
certeza a facilidade para dar manutenção em produtos finais. 
• Esse tem sido o principal atrativo da linguagem, para atrair os 
olhares do mercado comercial. 
• Entre as empresas que usam Haskell, podemos citar: 
• Intel: A Intel desenvolveu um compilador Haskell. 
• Google: Éusado em um pequeno número de projetos internos. 
• Facebook: Usa Haskell internamente em algumas ferramentas. 
(Lex-Pass). 
• The New York Times: Uma equipe usou uma biblioteca matriz 
paralela de Haskell para processar imagens em 2013. 
• A Linux desenvolveu diversas das suas ferramentas do seu 
sistema em Haskell. 
8 
Sintaxe 
• Sobre a sintaxe podemos dizer que a linguagem tenta imitar 
ao máximo as notações que já são populares na matemática. 
 
• Isso é facilmente percebido a partir das funções base da 
linguagem : 
 
• sin - seno de angulo 
• tan - tangente 
• sqrt - raiz quadrada 
• exp - exponencial 
• log - logaritmo natural 
• max - maior de 2 objetos dados 
• lcm - mínimo múltiplo comum 
9 
Sintaxe 
• Algumas convenções básicas importantes são apresentadas 
em comparação com a matemática: 
10 
p ç
Sintaxe 
• Mais exemplos de sintaxe: 
 
• Soma dos Elementos 
 sum [1,2,3,4,5] 
 15 
 
• Comprimento 
 length [1,2,3,4,5] 
 5 
 
• Obter um Prefixo 
 take 3 [1,2,3,4,5] 
 [1,2,3] 
 
• Inverter 
 everse [1,2,3,4,5] 
 [5,4,3,2,1] 11 
Sintaxe 
• Os comentários: 
Simples: Iniciados por -- e valem para toda a linha comentada. 
Embricados: São marcados pelas delimitações {- e -}. 
 
• Identação: 
 
12 
Sintaxe 
 
 
 
 
Nesse exemplo a tag let atribui nome para funções temporárias. 
 
 
 
 
No código a tag case cria uma condicional múltipla, e o _ 
representa algo como ‘os demais casos’ . 13 
Especificação 
lA primeira especificação da linguagem foi 
elaborada em 1990. 
 
lA especificação mais atual é fo Report de 
1998, mais conhecido como Haskell 98 
Report, que já foi revisada em 2003. 
14 
Implementação 
l O compilador mais popular de Haskell é o 
GHC. 
 
l Quando você tiver o GHC instalado, vão ter 
dois programas o ghc e o ghci. 
 
l O ghc compila código Haskell para 
executáveis e o ghci é um interpretador 
interativo que permite que você escreva 
código Haskell e tenha o retorno imediato. 
15 
Ambientes de Desenvolvimento 
l O ghci é um interpretador muito 
importante para quem deseja estuda 
Haskell, pois através dele é possível: 
 
ü Rodar trechos específicos do sistema, para 
testar o comportamento; 
ü Testar as funções separadamente; 
ü Obter informações detalhadas sobre funções 
e variáveis; 
ü Carregar/Descarregar módulos e usar seus 
tipos e funções; 
ü Realizar avaliações de expressões; etc 
 
16 
Exemplos de Programas 
 
• Faremos um comparativo entre as 
linguagens C++ e Haskell para mostrar a 
diferença entre as linguagens Imperativas e 
Funcionais. Utilizaremos o algoritmo 
Quicksort. 
 
17 
Exemplos de Programas 
 
l O Quicksort é um algoritmo de ordenação 
que recebe um vetor A[p..r] e rearranja o 
vetor em ordem crescente, é um método de 
ordenação muito rápido e eficiente. 
 
l Foi inventado por C.A.R. Hoare em 1960, 
quando visitou a Universidade de Moscovo 
como estudante. 
 
18 
QuickSort em C++ 
19 
QuickSort em Haskell 
20 
Vantagens 
 
l Inferência de dados é feita 
automaticamente, baseada no programa. 
 
l Avaliação Lazy. 
 
l Polimorfismo. 
 
l Funções de Ordem Superior. 
 
l As estruturas de dados pode ter tamanho 
infinito, como por exemplo as listas. 
 
l Não tem variáveis globais ou desvios 
incondicionais. 
 
21 
Desvantagens 
lAvaliação Lazy, só serão avaliados os 
parâmetros no corpo daquela função 
quando é utilizado. 
 
lOs detalhes de baixo nível da avaliação 
lazy são complicados, podendo perder 
um pouco de eficiência. 
 
lExecução lenta. 
 
lAlto consumo de memória. 
 
22Conclusão 
• Apesar ainda de ter pouca notoriedade ainda em 
relação à outras linguagens já consolidadas como C, 
Java ou C#, sua ascendência vem sido notória. 
 
• Através de estudos da literatura, também foi notório 
o anseio que a sociedade da computação tem para 
com o segmento da portabilidade. 
 
• Para aprender os princípios de Haskell é bastante 
recomendado que se aprenda previamente outras 
linguagens preferencialmente imperativas e, 
principalmente, ferramentas matemáticas como a 
indução, por exemplo. 
 
23 
Referências 
• Haskell: uma linguagem de programação ideal para 
matemáticos, Costa, E. T., et al., CAJ/UFG, 2013. 
• Programação Funcional Haskell, Caetano, M. F., INE, 
2001; 
• Programação Funcional com a Linguagem Haskell, Bois, 
A. R., MACS.HW, 2005; 
• A Linguagem Funcional Haskell, Piffer, M. M., et al.,UFSC, 
2002 ; 
• Programação Funcional, Vasconcelos, P., DCC/FCUP, 
2013; 
• Haskell Programming Language. 2011. Site ofcial da 
linguagem Haskell. Disponível em: 
http://www.haskell.org/haskellwiki/Haskell. Acessado 
em: 06 agosto. 2016 
 
24 
Dúvidas 
25

Continue navegando