Uma Aula Prática sobre LISP

Documentos relacionados
Linguagens de Programação Funcional

Introdução à Programação Funcional

LINGUAGENS FORA DO PADRÃO DE MERCADO

Exercícios da cadeira de Inteligência Artificial. Helena Sofia Pinto João Cachopo Daniel Gonçalves Carlos Lopes António Inês Lynce Pedro Matos

Linguagens de Programação Programação Funcional (Haskell)

Programação Funcional. Programação Funcional LISP. Paradigma de programação baseado em Funções Matemáticas

LISP - Introdução. Existem vários dialectos de LISP: COMMON LISP (o mais sofisticado e mais utilizado) Outros: MAC LISP, INTERLISP, XLISP

Trabalho de Programação Funcional Linguagem Scheme

ao paradigma imperativo

AutoLISP -I Introdução

CFAC: AutoLISP (I) - Introdução

AutoLISP - I Introdução. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Técnicas de análise de algoritmos

Cálculo Lambda Sem Tipos

Programação Procedimental

Introdução à Programação Funcional. Conteúdo

Aula de hoje. Expressões. Expressões. Expressões. Exemplos. Programa em Python. SCC Introdução à Programação para Engenharias

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

Capítulo 2 Operadores. A função scanf()

Algoritmos e Linguagem de Programação I

Resolução Exe 2.12 Monolítico Recursivo

Inteligência Artificial

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

Programação Estruturada Aula - Introdução a Linguagem de Programação

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Programação de Computadores:

Algoritmos e Programação

Organização e Arquitetura de Computadores INTRODUÇÃO

Compiladores. Conceitos Básicos

Linguagens de Programação

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Engenharia Civil. Representação da Informação. Introdução à Computação

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Módulo Tópicos Adicionais. Recorrências

Common-Lisp (introdutório).

Algoritmos Lógica e Programação Prof. Me. Adelson Felipe Dias Nogueira

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Introdução a Computação

Programação I A Linguagem C. Prof. Carlos Alberto

INFORMÁTICA: Informação automática

Algoritmos e Programação

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

Programação Python. Nesta aula... 1 Programação. 2 Python. Operadores e Operandos Variáveis, Expressões, Instruções Funções Ciclos Comentários

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Aula prática 5. Funções Recursivas

ARQUITETURA DE COMPUTADORES

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura de Von Neumann

Capítulo 1. Aspectos Preliminares

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

Disciplina de Algoritmos e Programação

Comando de Seleção em Java

Paradigmas de Programação

ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS PRONATEC

Capítulo 7. Expressões e Sentenças de Atribuição

TÉCNICO DE INFORMÁTICA - SISTEMAS

CP Introdução à Informática Prof. Msc. Carlos de Salles

Sistema Computacional

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Técnicas de Programação

CONJUNTO DE INSTRUÇÕES

Transcrição:

MAC 5710 - Estruturas de Dados - 2008

Linguagem LISP Surgiu no final dos anos 50 - John McCarthy (MIT). Linguagem para processamento simbólico. Muito usada em aplicações em Inteligência Artificial. Outras aplicações incluem AutoCad, Editor Emacs, etc. Linguagem funcional - LISP puro não possui atribuições (livre de efeitos colaterais). Lisp não é compliado (código fonte para código objeto de máquina), mas sim interpretado por meio de um interpretador. Interpretador é implementado usando estruturas de listas encadeadas. Coletor de lixo faz parte do sistema.

MuLISP Há muitos dialetos de LISP: Mac Lisp Franz Lisp Common Lisp Golden Lisp MuLisp, etc. Uma página contendo vários sistemas LISP: http://magnum.ime.uerj.br/ mpmelo/ime4701/2002-2.htm

Linguagem Funcional Aplicação de função a seus argumentos, com a possibildiade de composição funcional. Uso intenso de recursão. LISP significa LISt Processor Dijkstra brincava dizendo: LISP é a maneira mais elegante de disperdiçar recursos :-) Outra brincadeira: LISP significa Lot of Irritating Stupid Parenthesis.

MuLISP5.1 MuLISP foi desenvolvido nos anos 80 para o sistema DOS. A partir de MuLISP a empresa Soft Warehouse de Honolulu desenvolveu o MuMath cujo sucessor é o sistema Derive, um sistema de álgebra computacional. MuLISP é bem compacto. O código ocupa apenas 38 Kbytes. Possui aritmética de precisão ilimitada (como o nosso programa 1 do curso).

Demonstração MuLISP No prompt do sistema DOS, tecle mulisp. O sinal de prompt do MuLISP é o sinal de dólar $ Depois do prompt $ pode-se entrar uma função seguida de argumentos, se houver. O interpretador MuLISP vai avaliar a função e retornar o resultado da avaliação. Exemplos: $ 5 5 A função constante 5 vai devolver o número 5. $ (+ 3 5) 8 O primeiro elemento da lista + é interpretado como uma função (soma), os demais elementos (3 e 5) são argumentos da função. O MuLISP retorna o valor da soma.

Demonstração MuLISP $ (+ 3 5) ou (quote (+ 3 5)) (+ 3 5) O símbolo ou a função quote faz com que o argumento em seguida seja tratado como um valor literal que, portanto, não é avaliado. $ (+ 3 (- 10 2)) 11 Composição de funções é possível. $ (+ (* 5 2) (- 10 2)) 18 Mais composições de funções. $ (* 123456789 987654321) 121932631112635269 Precisão ilimitada : cada número é armazenado como uma lista ligada de algarismos. (system) Termina o interpretador MuLISP e retorna-se ao DOS.

Demonstração MuLISP $ (zerop 9) nil A função zerop testa se o argumento é zero. Se sim retorna T caso contrário retorna nil. $ (zerop (- 100 (+ 80 20))) T $ (sub1 60) 59 A função sub1 subtrai um. $ (defun cubo (n) (* n n n)) cubo Defun serve para definir uma função. Após a definição o sistema retorna o nome da função. De agora em diante, pode-se usar a função definida. $ (cubo 2) 8

Demonstração MuLISP $ (defun fatorial (n) (cond ( (zerop n) 1) ( T (* n (fatorial (sub1 n)))) ) ) fatorial Cond é uma condicional. Segindo Cond vêm pares de funções. Avalia-se o primeiro elemento de cada par, sucessivamente, até se chegar a um valor não-nil. Entao o valor de Cond é o valor do segundo elemento do par. $ (fatorial 5) 120 Experimente chamar fatorial com número bem grande. $ (rds doctor.lsp) doctor A função rds lê o programa escrito em MuLISP especificado pelo argumento e inicia a avaliação.

Próximo termo de uma sequência Este programa recebe uma sequência de números e tenta descobrir o próximo. Por ex: $ (nextterm (quote ( 1 2 3 4 5) )) vai produzir o número 6. Experimente outras sequências.