haskell trabalho

Download HASKELL TRABALHO

Post on 04-Jul-2015

195 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Universidade Federal Rural de Pernambuco - UFRPE Departamento de Estatstica e Informtica - DEINFO Bacharelado em Cincia da Computao

Glauber Henrique Joo Paulo Rodrigo Monteiro Thas Bione

IntroduoA linguagem de programao Haskell baseada no paradigma de programao funcional, que consiste na escolha de funes matemticas que expressam o problema de forma declarativa, explicitando a sua funcionalidade em funes matemticas. Daremos incio nossa apresentao com uma breve demonstrao das caractersticas de cada linguagem referida em nossa pesquisa.

Como Haskell funciona?? Baseada no Clculo Lambda Paradigma Funcional Avalia expresses

Alto nvel de abstrao Compilada

Fortemente tipada Listas homogneas Declarao de tipos

Como Python Funciona?? Grande semelhana com o pseudo-cdigo Multifuncional Multiplataforma

Possui ambiente IDLE Dinamicamente tipada No possui declarao de tipos

Interpretada

Para Comear...... A programao Funcional um paradigma que trata a computao como uma avaliao de funes matemticas . Tais funes podem ser aplicadas em sequncia de dados (geralmente listas ). So exemplos de linguagens funcionais : LISP, Scheme e Haskell (esta ltima influenciou o projeto do Python de forma marcante).

As operaes bsicas do paradigma funcional so implementadas no Python pelas funes builtin map (), filter (), reduce() e zip(). No Python a funo lambda uma funo annima composta por expresses. Essa funo pode ter apenas uma linha e pode ser atribuda a uma varivel. Funes lambda so muito usadas em programao funcional. Vale orientar que a funo reduce () no Python tem a mesma funcionalidade que a foldr1, utilizada em Haskell.

LambdaEm Haskell ( representado pelo \): Ao invs de usar equao para definir funes, pode-se utilizar uma notao lambda na qual a funo no 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 funo tradicional. Ex.: quad = lambda x,y,z : (x**2,y**2,z**2) print quad (2,4,6)

*** Lambda consome menos recursos computacionais, porm so mais limitadas.

Foldr1Em 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 funo que recebe dois parmetros, nos dois primeiros elementos de uma sequncia, aplica novamente a funo usando como parmetros o resultado do primeiro par e o terceiro elemento, at o final.

Ex.:

MapEm Haskell: Aplica uma funo 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 funo a todos os itens de uma sequncia, gerando outra lista contendo os resultados e com o mesmo tamanho da lista inicial. Sempre retorna uma lista.

Ex.:

FilterEm Haskell: Filtra a lista atravs de um predicado ( funo 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 funo aplicada em todos os itens de uma sequencia, se a funo retornar um valor que seja avaliado como verdadeiro, o item original far parte da sequencia resultante.

Ex.:

ZipEm Haskell : Transforma duas listas em uma lista de tuplas. def.: zip (a:x) (b:y) = (a,b) : zip x y zip _ _ = []

Ex.:

Em Python: Constri uma srie de sequncias a partir de outra, aonde a primeira nova sequncia contm o primeiro elemento de cada sequncia original, a segunda nova sequncia contm o segundo elemento de cada sequncia original, at que alguma das sequncias originais acabe.

EX.:

List ComprehensionEm Haskell : uma maneira de se descrever uma lista inspirada na notao de conjuntos. Na list Comprehension o a Bool).Ex.:

Em Python: Equivale a uma notao matemtica tipo:

melhor que usar map () e reduce () tanto em termo de processamento quanto em consumo de memria. Ex.: