programação funcional

10
Programação Funcional Otavio Bergmann e Raphael Miollo Parte 2 – Investigação e apresentação

Upload: cili

Post on 22-Feb-2016

30 views

Category:

Documents


0 download

DESCRIPTION

Programação Funcional. Otavio Bergmann e Raphael Miollo. Parte 2 – Investi ga ção e apresentação. Questão 2.1 : Pesquise a  história  de uma linguagem de programação funcional à sua escolha, buscando responder às seguintes questões : (Linguagem escolhida: LISP). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programação Funcional

Programação Funcional

Otavio Bergmann e Raphael Miollo

Parte 2 – Investigação e apresentação

Page 2: Programação Funcional

2.1.1 – Quem criou a linguagem?◦ LISP foi inventado por John McCarthy em 1958,

enquanto ele estava no Instituto de Tecnologia de Massachusetts(MIT). McCarthy publicou um artigo onde ele mostra que com alguns operadores simples e uma notação para funções é possível construir uma linguagem Turing para algoritmos.

Questão 2.1: Pesquise a história de uma linguagem de programação funcional à sua escolha, buscando responder às seguintes questões: (Linguagem escolhida: LISP)

John McCarthy (1927-2011)

Page 3: Programação Funcional

2.1.2 – Qual a motivação para a criação da linguagem?• Os motivação para criação de LISP, segundo McCarthy

era desenvolver uma linguagem algébrica para o processamento de listas para trabalho com IA(inteligência artificial).

2.1.3 – Em que ano foi criada e como evoluiu a linguagem?LISP foi criada em 1958 e sua evolução foi de grande

importância para as linguagens que surgiram posteriormente.

Durante 1980s e 1990s, um esforço grande foi feito e surgiram numerosos dialetos do lisp(interlisp, Maclisp, ZetaLisp).

Lisp influenciou pesadamente o inventor de SmallTalk.

Page 4: Programação Funcional

2.1.4 - A linguagem é usualmente implementada via interpretador, compilador, ou ambos?◦ A linguagem LISP é interpretada, onde o usuário

digita em uma linguagem formal definida e recebe de volta a avaliação de sua expressão.

◦ LISP é implementada via interpretador, porem todos os dialetos de LISP tem compiladores. Em algus dialetos o compilador é uma função que pode invocar a partir de código normal para transformar uma lista numa função invocável.

Page 5: Programação Funcional

2.1.5 – Informe nomes, versões, URL’s e descrições de duas implementações da linguagem.◦ FranzLisp (http://en.wikipedia.org/wiki/Franz_Lisp)◦ InterLisp (http://c2.com/cgi/wiki?InterLisp)◦ ZetaLisp (http://wiki.alu.org/ZetaLisp)◦ Scheme (http://groups.csail.mit.edu/mac/projects/scheme/)◦ LeLisp (http://lelisp.org/)◦ AutoLisp (http://pt.wikipedia.org/wiki/AutoLISP)◦ MacLisp (http://c2.com/cgi/wiki?MacLisp)

Page 6: Programação Funcional

Algumas coisas que LISP trouxe:◦ Uso de condicionais (if-then-else);◦ Garbage Colletor;◦ Recursividade;◦ Tipos de dados;◦ Variáveis são tratadas como ponteiros;

Alguns fatos:o O nome LISP vem de List Processor; A primeira plataforma de popular para desenvolvimento de lojas

virtuais, a ViaWeb foi inteiramente desenvolvida em LISP; LISP é a principal linguagem usada em estudos de inteligência

artificial;

2.1.6 – Descreva algum aspecto que você considera curioso sobre a linguagem.

Page 7: Programação Funcional

Prós:◦ Programas mais concisos;◦ Programas próximos de uma especificação

matemática;◦ Permite decompor problemas em componentes

reutilizáveis; Contras:oAlguns algoritmos são mais eficientes quando

implementados de forma imperativa;oDifícil de prever os custos de execução;oCompiladores/interpretadores mais complexos.

2.2 – O paradigma de programação funcional tem seus prós e contras. Busque mais sobre isso e escolha uma vantagem e uma desvantagem do paradigma.

Page 8: Programação Funcional

Funções de alta ordem podem receber como parâmetro ou retornar funções.◦ Alguns exemplos são: Mapear, Filtrar, Reduzir.

◦ Ex: >map sqrt[100, 9, 25, 16] A função acima pega cada elemento da lista e obtém a

sua raiz quadrada. Saída: [10, 3, 5, 4]

2.3 – Sabendo que funções de alta ordem são recursos importantes ne programação funcional, crie uma apresentação (slides ou vídeo) explicando uma função de alta ordem à sua escolha (Haskell).

100

Map sqrt

9 25 16

10 3 5 4

√100 √9 √25 √16

Entrada

Saída

Page 9: Programação Funcional

Em provas e exames na área de computação (POSCOMP, ENADE, concursos, disciplinas, etc), é comum haver alguma questão sobre paradigmas de programação. Pesquise provas/exames disponíveis na internet e selecione uma questão relacionada ao paradigma de programação funcional. Estude o que for necessário para resolver a questão.

Page 10: Programação Funcional

Implementação do algoritmo de ordenação quicksort com haskell.

Exemplo em C void qsort(int a[], int lo, int hi) { int h, l, p, t; if (lo < hi) { l = lo; h = hi; p = a[hi]; do { while ((l < h) && (a[l] <= p)) l = l+1; while ((h > l) && (a[h] >= p)) h = h-1; if (l < h) { t = a[l]; a[l] = a[h]; a[h] = t;

◦ } } while (l < h); a[hi] = a[l]; a[l] = p; qsort( a, lo, l-1 ); qsort( a, l+1, hi ); } }

2.5- Procure na web algum programa escrito segundo o paradigma de programação funcional, em qualquer linguagem

Exemplo em Haskell

qsort [] = []qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)