Noções de lisp Lisp: LISp Processing J.M.Barreto INE-CTC-UFSC.

Slides:



Advertisements
Apresentações semelhantes
Decidibilidade e Indecidibilidade
Advertisements

Programação em Java Prof. Maurício Braga
gerador de código intermediário
Variantes de Máquina de Turing
TÉCNICAS DE PROGRAMAÇÃO I
3 Paradigmas e Linguagens de Programação
UNIESP – 2009 T.A.I. Prof. EMANUEL WAGNER. A gestação de IA ( ) Modelo de neurônios artificiais (McCulloch&Pitts-43), precursor das tradições.
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
TEORIA DA COMPUTAÇÃO Parte III  Máquina de Turing
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Introdução a Programação Renata Freire
LISP – Uma Introdução Claudio Esperança.
Medida do Tempo de Execução de um Programa
FACENS – Engenharia da Computação Inteligência Artificial
Programação Lógica: PROLOG
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Construção de Compiladores
Introdução à Programação
Algoritmos e Programação
Algoritmos e Programação Thyago Maia Tavares de Farias Aula 25.
Informática Teórica Engenharia da Computação
Aula prática 12 Listas Encadeadas
JAVA: Conceitos Iniciais
Prolog Programação Lógica Ícaro A. Souza.
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula prática 6 Vetores e Matrizes
Introdução à Programação
Linguagem de Programação II Parte IX
Representação de Algoritmos
CADEIA DE CARACTERES (Strings)
Erick Vagner Cabral Igor Lucena Vitor Baptista
Informática Teórica Engenharia da Computação
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Programação II Estruturas de Dados Aula 02 - continuação
LINGUAGENS DE PROGRAMAÇÃO PROF. DANIELA PIRES
Caracterização e Objetivos das LP
Teoria da Computação Aula 5 Prof. Fabiano Sabha.
Vetores Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e.
Algoritmos e Estruturas de Dados I – Recursão
Programação Orientada à Objetos
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Algoritmos e Estruturas de Dados I – Recursão
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
Paradigma funcional.
ARQUIVOS.
09/04/2017 Linux Comandos básicos.
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Nível : Iniciante (Fácil)
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Aula Prática 4 Monitoria IP/CC (~if669).
Redução.
Linguagens de Programação
Programação Lógica com Prolog
A Classe NP Teoria da Computação Profa. Sandra de Amo.
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
Fundamentos de linguagens de programação
Algoritmos.
Programação de Computadores - 1
Álgebra Vetorial e Linear para Computação Monitora: Aluna Jeane Mendes da Silva Santos Orientador: Professor Adriano Pedrosa CIn – UFPE.
Introdução à Programação
Algoritmos e Programação I
SISTEMAS DE INFORMAÇÃO
Módulo II Capítulo 1: Orientação a Objetos
Clojure  Instalando: Vá em Faça download de clojure_1.0.0.zip.
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Estrutura de Dados Prof. André Cypriano M. Costa
PROGRAMAÇÃO DE COMPUTADORES Engenharia Unificado Prof. Leonardo Bacelar Lima Santos Departamento de Matemática
Adriano A. Ribeiro. Português Estruturado Apesar do Português Estruturado ser uma linguagem bastante simplificada, ela possui todos os elementos básicos.
Transcrição da apresentação:

Noções de lisp Lisp: LISp Processing J.M.Barreto INE-CTC-UFSC

Qual a razão de conhecer LISP? Segundo McDermot e Charniac a razão é a mesma de aprender francês se vai estudar na França: é a lingua natural falada pelos franceses! Será isto ainda verdade? Nem tanto, mas... Será a Programação Funcional? J. M. Barreto UFSC_INE

Razões para usar LISP (1/4) LISP é uma linguagem funcional pobre, mas raros são os profissionais de IA que escolhem LISP por suas características funcionais. Exatamente por esta razão ela é pobre em termos funcionais: juntam-se outras facilidades que mascaram o estilo funcional puro! J. M. Barreto UFSC_INE

Razões para usar LISP (2/4) LISP é estensível e se não se gosta de um interface oferecido é fácil criar outro. LISP tem programa e dados com a mesma estrutura de dados: listas. Logo, um programa pode facilmente ler a ele mesmo, modificar-se durante a execução e continuar funcionando modificado sem interrupção: isto é, torna-se fácil implementar algoritmos de aprendizado. J. M. Barreto UFSC_INE

Razões para usar LISP (3/4) Estruturas de dados são facilmente manipuladas em LISP. Por exemplo: A pilha é a própria lista; Existem primitivas para ler, juntar novo elemento na pilha, etc. Árvores são implementadas como listas de listas., s3endo fácil percorrê-las e modificá-las. J. M. Barreto UFSC_INE

Razões para usar LISP (4/4) É fácil aprender LISP e seu aprendizado ajuda a desenvolver capacidades mentais. Foi exatamente acreditando nisto que Papert, criou no MIT a linguagem LOGO, subconjunto de LISP, com ênfase gráfica, para uso do aprendizado de crianças. As experiências tem sido animadoras. E como nasceu esta linguagem? J. M. Barreto UFSC_INE

Lisp: Nota histórica (1/3) John McCarthy vinha trabalhando há anos em uma linguagem que fosse, como provado por Turing, equivalente à sua máquina. Em 1960, dando aula no MIT demonstrou que a função “eval” era capaz de simular a máquina de Turing, resultado teórico de grande valor. J. M. Barreto UFSC_INE

Lisp: Nota histórica (2/3) Um dos alunos de John McCarthy, Steve Russel comentou: “sendo verdade este teorema, basta implementar “eval” e teremos a Máquina de Turing”, ao que McCarthy contestou “Não confunda teoria com prática, este é um resultado teórico, para ter valor prático tem de percorrer um longo caminho”. J. M. Barreto UFSC_INE

Lisp: Nota histórica (3/3) Russel não se satisfez. Implementou “eval” e algumas outras funções em Máquina IBM704, apresentou seu trabalho e assim nasceu Lisp, linguagem fruto do espírito prático de aluno com grande conhecimento teórico. Guarda ainda hoje lembranças do passado: car: “contents of address register; cdr: “contents of decrement register; Símbolos do assembler do IBM704. J. M. Barreto UFSC_INE

Sintaxe de Lisp Vocabulário de Lisp: Atomos: elementos indivisíveis, podendo ser: Números; ex: 1, 13, 15, -.35, etc. Identificadores: sequencias de letras e números; ex: Lisa, Jane1, fibo, etc. Identificadores reservados: +, -, /, *, car, cdr, etc. Delimitadores: (,) J. M. Barreto UFSC_INE

Sintaxe de Lisp Linguagem Lisp: Lisp* = atom | lista Atom = identificador | identificador reservado | número Lista = (atom) | (atom lista) J. M. Barreto UFSC_INE

Lisp Puro Lisp Puro contem as seguintes funções primitivas: Car primeiro elemento de uma lista; Cdr: o que sobra de uma lista tirando o 1º elemento Cons: constroi lista dado um elemento e uma lista; Eql: retorna T se os dois elementos que se seguem são iguais, NIL no caso contrario; Atom: retorna T se elemento que o segue é atomico, NIL em caso contrário. J. M. Barreto UFSC_INE

Semantica operacional de Lisp Puro Seletores: car, cdr > (car ´(a d f)) > A > (cdr ´(a s d f g)) > (s d f g) Construtor: > (cons ‘a ‘(s d f g)) > (a s d f g) Predicado atômico: > (atom ‘jane) > T > (atom ‘(a s d f g)) > NIL Predicado egalitário > (eql ‘casa ‘casa) > (eql 10 20) J. M. Barreto UFSC_INE

Assignação e valor de atomo (set ‘a 10) A (setq b 20) B 20 ‘B (atom ‘b) T (atom b) (setq c ‘(a s d)) C (a s d) (car c) A (cdr c) (s d) (atom c) NIL (atom ‘c) T J. M. Barreto UFSC_INE

Manipulação de listas; exemplos (setq ‘v ‘(e i o u)) V (cons ‘a v) (a e i o u) (car ‘(q w e r t)) Q (cdr ‘(q w e r t)) (w e r t) (cdr (car v)) nil (car (cdr (cdr ‘(a s d f g)))) D (caddr ‘(a s d f g)) (atom v) Nil (eql ‘v ‘v) T (eql ‘v v) nil J. M. Barreto UFSC_INE

Operações aritméticas (+ 2 3 4 5) 14 (+1 2) 3 (*2 3) 6 (* 2 3 4 ) 24 (* (+ 2 3) (+ 1 2 3)) 30 (* 2 (* 5 6 3) 2) 360 e assim não é preciso chamar a calculadora do computador... J. M. Barreto UFSC_INE

Novas Funções (defun nome-da-função (variáveis ligadas) (corpo da definição)) Corpos: Cond Program if J. M. Barreto UFSC_INE

Exemplos de novas funções Encontra o segundo elemento de uma lista: (defun segundo (lista) (cadr lista)) Calcula o fatorial de um número: (defun fat (n) (cond (( > n 0) (‘Numero negativo não tem fatorial’)) (( = n 0) 1) (( = n 1) 1) (T (fat (- n 1))))) J. M. Barreto UFSC_INE

Lê uma lista até um elemento dado retornando o que sobra: (defun resto (lista elemento) (cond ((eql (car lista) elemento) cdr lista) (T (resto ((cdr lista) elemento ))))) J. M. Barreto UFSC_INE

Exercícios Escreva 2 funções Lisp para juntar novos telefones e consultar uma lista de nomes e de telefones. Sugestão: use como estrutura de dados uma lista de pares, (nome telefone) Sabendo que sua verão de Lisp usa > e < para ordem alfabética, escreva função Lisp para colocar em ordem um lista de nomes. E se fosse a lista de endereços do exercício anterior? J. M. Barreto UFSC_INE

Que faço com isso tudo? Jogou! Não! Não jogue o pobre cálculo  no lixo! Ele é a base das linguagens funcionais e de Lisp, que apesar de todas as suas impurezas vale o estudo! Jogou! J. M. Barreto UFSC_INE