130 likes | 338 Views
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).
E N D
Programação Funcional Otavio Bergmann e Raphael Miollo Parte 2 – Investigaçã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) • 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. John McCarthy (1927-2011)
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.
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.
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)
2.1.6 – Descreva algum aspecto que você considera curioso sobre a linguagem. • Algumas coisas que LISP trouxe: • Uso de condicionais (if-then-else); • GarbageColletor; • Recursividade; • Tipos de dados; • Variáveis são tratadas como ponteiros; • Alguns fatos: • 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.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. • Prós: • Programas mais concisos; • Programas próximos de uma especificação matemática; • Permite decompor problemas em componentes reutilizáveis; • Contras: • Alguns algoritmos são mais eficientes quando implementados de forma imperativa; • Difícil de prever os custos de execução; • Compiladores/interpretadores mais complexos.
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). • Funções de alta ordem podem receber como parâmetro ou retornar funções. • Alguns exemplos são: Mapear, Filtrar, Reduzir. • Ex: >mapsqrt[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] Mapsqrt Entrada 25 16 100 9 √100 √9 √25 √16 5 4 Saída 10 3
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.
2.5- Procure na web algum programa escrito segundo o paradigma de programação funcional, em qualquer linguagem • Implementação do algoritmo de ordenação quicksort com haskell. • Exemplo em C • voidqsort(int a[], intlo, inthi) • { • 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 ); • } • } Exemplo em Haskell qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)