haskell trabalho

19
Universidade Federal Rural de Pernambuco - UFRPE Departamento de Estatística e Informática - DEINFO Bacharelado em Ciência da Computação Glauber Henrique João Paulo Rodrigo Monteiro Thaís Bione

Upload: thais-bione

Post on 04-Jul-2015

265 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: HASKELL TRABALHO

Universidade Federal Rural de Pernambuco - UFRPEDepartamento de Estatística e Informática - DEINFO

Bacharelado em Ciência da Computação

Glauber Henrique

João Paulo

Rodrigo Monteiro

Thaís Bione

Page 2: HASKELL TRABALHO
Page 3: HASKELL TRABALHO

Introdução

A linguagem de programação Haskell é baseada no

paradigma de programação funcional, que consiste na escolha de funções matemáticas que expressam o problema de forma declarativa, explicitando a sua funcionalidade em funções matemáticas.

Daremos início à nossa apresentação com uma breve demonstração das características de cada linguagem referida em nossa pesquisa.

Page 4: HASKELL TRABALHO

Como Haskell funciona??

Baseada no Cálculo Lambda

Paradigma Funcional

Avalia expressões

Alto nível de abstração

Compilada

Fortemente tipada

Listas homogêneas

Declaração de tipos

Page 5: HASKELL TRABALHO

Como Python Funciona??

Grande semelhança com o pseudo-código

Multifuncional

Multiplataforma

Possui ambiente IDLE

Dinamicamente tipada

Não possui declaração de tipos

Interpretada

Page 6: HASKELL TRABALHO

Para Começar...

... A programação Funcional é um paradigma que trata a computação como uma avaliação de funções matemáticas . Tais funções podem ser aplicadas em sequência de dados (geralmente listas ). São exemplos de linguagens funcionais : LISP, Scheme e Haskell (esta última influenciou o projeto do Python de forma marcante).

Page 7: HASKELL TRABALHO

As operações básicas do paradigma funcional são implementadas no Python pelas funções builtin map (), filter (), reduce() e zip().

No Python a função lambda é uma função anônima composta por expressões. Essa função pode ter apenas uma linha e pode ser atribuída a uma variável. Funções lambda são muito usadas em programação funcional.

Vale orientar que a função reduce () no Python tem a mesma funcionalidade que a foldr1, utilizada em Haskell.

Page 8: HASKELL TRABALHO

Lambda

Em Haskell (é representado pelo ‘\’):

Ao invés de usar equação para definir funções, pode-se utilizar uma notação lambda na qual a função não precisa de um nome.

Ex.:

sucessor :: int -> int

sucessor x = x+1 , que é o mesmo que \x -> x+1

Page 9: HASKELL TRABALHO

Em Python :

Poderia ser utilizada em qualquer lugar que exigiria uma função tradicional.

Ex.:

quad = lambda x,y,z : (x**2,y**2,z**2)

print quad (2,4,6)

*** Lambda consome menos recursos computacionais, porém são mais limitadas.

Page 10: HASKELL TRABALHO

Foldr1

Em Haskell:

Coloca um operador entre os elementos de uma lista.

def:

foldr1 :: (t->t->t) -> [t]-> t

foldr1 f [a] = a

Ex.:

Page 11: HASKELL TRABALHO

Em Python (reduce()):

Aplica uma função que recebe dois parâmetros, nos dois primeiros elementos de uma sequência, aplica novamente a função usando como parâmetros o resultado do primeiro par e o terceiro elemento, até o final.

Ex.:

Page 12: HASKELL TRABALHO

Map

Em Haskell:

Aplica uma função a todos os elementos de uma lista...

def:

map :: (t->u) -> [t] -> [u]

map f [] =[]

map f (a:x) = f a : map f x

Ex.:

Page 13: HASKELL TRABALHO

Em Python:

Aplica uma função a todos os itens de uma sequência, gerando outra lista contendo os resultados e com o mesmo tamanho da lista inicial. Sempre retorna uma lista.

Ex.:

Page 14: HASKELL TRABALHO

Filter

Em Haskell:

Filtra a lista através de um predicado ( função que tem tipo Bool), ou propriedade.

def.:

filter :: (t-> Bool)-> [t] -> [t]

filter p [] = []

filter p (a:x)

| p a = a : filter p x

| otherwise = filter p x

Ex.:

Page 15: HASKELL TRABALHO

Em Python:

Uma função é aplicada em todos os itens de uma sequencia, se a função retornar um valor que seja avaliado como verdadeiro, o item original fará parte da sequencia resultante.

Ex.:

Page 16: HASKELL TRABALHO

Zip

Em Haskell :

Transforma duas listas em uma lista de tuplas.

def.:

zip (a:x) (b:y) = (a,b) : zip x y

zip _ _ = []

Ex.:

Page 17: HASKELL TRABALHO

Em Python:

Constrói uma série de sequências a partir de outra, aonde a primeira nova sequência contém o primeiro elemento de cada sequência original, a segunda nova sequência contém o segundo elemento de cada sequência original, até que alguma das sequênciasoriginais acabe.

EX.:

Page 18: HASKELL TRABALHO

List Comprehension

Em Haskell :

É uma maneira de se descrever uma lista inspirada na notação de conjuntos.

Na list Comprehension o a <-list é chamado de generator(gerador), pois ele gera os dados em que os resultados são construídos. Os geradores podem ser combinados com predicados (predicates) que são funções que devolvem valores booleanos (a-> Bool).

Ex.:

Page 19: HASKELL TRABALHO

Em Python:

Equivale a uma notação matemática tipo:

É melhor que usar map () e reduce () tanto em termo de processamento quanto em consumo de memória.

Ex.: