Parte 2 – Investigação e apresentação Otavio Bergmann e Raphael Miollo 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) 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; Prós: ◦ Programas mais concisos; ◦ Programas próximos de uma especificação matemática; ◦ Permite decompor problemas em componentes reutilizáveis; Contras: o Alguns algoritmos são mais eficientes quando implementados de forma imperativa; o Difícil de prever os custos de execução; o Compiladores/interpretadores mais complexos. 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. Map sqrt Saída: [10, 3, 5, 4] Entrada 100 9 25 √100 √9 √25 3 5 10 16 √16 4 Saída 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 ); } } Exemplo em Haskell qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)