HASKELL TRABALHO

Download HASKELL TRABALHO

Post on 04-Jul-2015

193 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

<p>Universidade Federal Rural de Pernambuco - UFRPE Departamento de Estatstica e Informtica - DEINFO Bacharelado em Cincia da Computao</p> <p>Glauber Henrique Joo Paulo Rodrigo Monteiro Thas Bione</p> <p>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.</p> <p>Como Haskell funciona?? Baseada no Clculo Lambda Paradigma Funcional Avalia expresses</p> <p> Alto nvel de abstrao Compilada</p> <p> Fortemente tipada Listas homogneas Declarao de tipos</p> <p>Como Python Funciona?? Grande semelhana com o pseudo-cdigo Multifuncional Multiplataforma</p> <p> Possui ambiente IDLE Dinamicamente tipada No possui declarao de tipos</p> <p> Interpretada</p> <p>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).</p> <p>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.</p> <p>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 -&gt; int sucessor x = x+1 , que o mesmo que \x -&gt; x+1</p> <p>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)</p> <p>*** Lambda consome menos recursos computacionais, porm so mais limitadas.</p> <p>Foldr1Em Haskell: Coloca um operador entre os elementos de uma lista. def: foldr1 :: (t-&gt;t-&gt;t) -&gt; [t]-&gt; t foldr1 f [a] = a Ex.:</p> <p>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.</p> <p>Ex.:</p> <p>MapEm Haskell: Aplica uma funo a todos os elementos de uma lista... def: map :: (t-&gt;u) -&gt; [t] -&gt; [u] map f [] =[] map f (a:x) = f a : map f x</p> <p>Ex.:</p> <p>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.</p> <p>Ex.:</p> <p>FilterEm Haskell: Filtra a lista atravs de um predicado ( funo que tem tipo Bool), ou propriedade. def.: filter :: (t-&gt; Bool)-&gt; [t] -&gt; [t] filter p [] = [] filter p (a:x) | p a = a : filter p x | otherwise = filter p x Ex.:</p> <p>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.</p> <p>Ex.:</p> <p>ZipEm Haskell : Transforma duas listas em uma lista de tuplas. def.: zip (a:x) (b:y) = (a,b) : zip x y zip _ _ = []</p> <p>Ex.:</p> <p>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.</p> <p>EX.:</p> <p>List ComprehensionEm Haskell : uma maneira de se descrever uma lista inspirada na notao de conjuntos. Na list Comprehension o a Bool).Ex.:</p> <p>Em Python: Equivale a uma notao matemtica tipo:</p> <p> melhor que usar map () e reduce () tanto em termo de processamento quanto em consumo de memria. Ex.:</p>