HASKELL TRABALHO

Preview:

Citation preview

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

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.

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

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

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).

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.

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

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.

Foldr1

Em Haskell:

Coloca um operador entre os elementos de uma lista.

def:

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

foldr1 f [a] = a

Ex.:

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.:

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.:

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.:

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.:

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.:

Zip

Em Haskell :

Transforma duas listas em uma lista de tuplas.

def.:

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

zip _ _ = []

Ex.:

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.:

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.:

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.: