Noes de lisp Lisp LISp Processing J M

  • Slides: 21
Download presentation
Noções de lisp Lisp: LISp Processing J. M. Barreto INE-CTC-UFSC

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

Qual a razão de conhecer LISP? • Segundo Mc. Dermot e Charniac a razão

Qual a razão de conhecer LISP? • Segundo Mc. Dermot 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

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

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.

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. , s 3 endo 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

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 Mc. Carthy vinha trabalhando há anos em uma

Lisp: Nota histórica (1/3) • John Mc. Carthy 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 Mc. Carthy, Steve Russel

Lisp: Nota histórica (2/3) • Um dos alunos de John Mc. Carthy, Steve Russel comentou: “sendo verdade este teorema, basta implementar “eval” e teremos a Máquina de Turing”, ao que Mc. Carthy 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

Lisp: Nota histórica (3/3) • Russel não se satisfez. Implementou “eval” e algumas outras funções em Máquina IBM 704, 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 IBM 704. J. M. Barreto UFSC_INE

Sintaxe de Lisp • Vocabulário de Lisp: • Atomos: elementos indivisíveis, podendo ser: –

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, Jane 1, fibo, etc. – Identificadores reservados: +, -, /, *, car, cdr, etc. • Delimitadores: (, ) J. M. Barreto UFSC_INE

Sintaxe de Lisp • Linguagem Lisp: – Lisp* = atom | lista – Atom

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

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

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) J. M. Barreto UFSC_INE Predicado atômico: – – > (atom ‘jane) >T > (atom ‘(a s d f g)) > NIL Predicado egalitário – – > (eql ‘casa) >T > (eql 10 20) > NIL

Assignação e valor de atomo • (set ‘a 10) A • (setq b 20)

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

Manipulação de listas; exemplos • (setq ‘v ‘(e i o u)) V • (cons

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 J. M. Barreto UFSC_INE • (car (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

Operações aritméticas • (+ 2 3 4 5) 14 • (+1 2) 3 •

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

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

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

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

• 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 • Sabendo que sua verão para juntar novos

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

Que faço com isso tudo? Jogou! J. M. Barreto UFSC_INE • Não! • Não

Que faço com isso tudo? Jogou! J. M. Barreto UFSC_INE • 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!