1 / 21

Noções de lisp

Noções de lisp. Lisp: LISp Processing. 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?.

maili
Download Presentation

Noções de lisp

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Noções de lisp Lisp: LISp Processing

  2. 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?

  3. 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!

  4. 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.

  5. 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.

  6. 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?

  7. 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.

  8. 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”.

  9. 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.

  10. 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: (,)

  11. Sintaxe de Lisp • Linguagem Lisp: • Lisp* = atom | lista • Atom = identificador | identificador reservado | número • Lista = (atom) | (atom lista)

  12. 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.

  13. 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) > T > (eql 10 20) > NIL Semantica operacional de Lisp Puro

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

  15. (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)) D (atom v) Nil (eql ‘v ‘v) T (eql ‘v v) nil Manipulação de listas; exemplos

  16. (+ 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... Operações aritméticas

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

  18. 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)))))

  19. 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 )))))

  20. 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? Exercícios

  21. Que faço com isso tudo? • 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!

More Related