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