Otavio Bergmann e Raphael Miollo Parte 2 – Investigação e apresentação
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 ( )
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) – 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.
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, URLs e descrições de duas implementações da linguagem. FranzLisp ( InterLisp ( ZetaLisp ( Scheme ( LeLisp ( AutoLisp ( 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. Saída: [10, 3, 5, 4] 100 Map sqrt Entrada 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)