j.m.barreto ine-ctc-ufsc noções de lisp lisp: lisp processing

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

Upload: bernardo-marreiro-peixoto

Post on 07-Apr-2016

297 views

Category:

Documents


8 download

TRANSCRIPT

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

J.M.Barreto INE-CTC-UFSC

Noções de lispNoções de lisp

Lisp: LISp Processing

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

J. M. Barreto UFSC_INE

Qual a razão de conhecer LISP?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?

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

J. M. Barreto UFSC_INE

Razões para usar LISP (1/4)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!

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

J. M. Barreto UFSC_INE

Razões para usar LISP (2/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.

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

J. M. Barreto UFSC_INE

Razões para usar LISP (3/4)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.

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

J. M. Barreto UFSC_INE

Razões para usar LISP (4/4)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?

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

J. M. Barreto UFSC_INE

Lisp: Nota histórica (1/3)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.

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

J. M. Barreto UFSC_INE

Lisp: Nota histórica (2/3)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”.

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

J. M. Barreto UFSC_INE

Lisp: Nota histórica (3/3)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.

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

J. M. Barreto UFSC_INE

Sintaxe de LispSintaxe 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: (,)

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

J. M. Barreto UFSC_INE

Sintaxe de LispSintaxe de Lisp

• Linguagem Lisp:– Lisp* = atom | lista– Atom = identificador | identificador reservado |

número– Lista = (atom) | (atom lista)

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

J. M. Barreto UFSC_INE

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

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

J. M. Barreto UFSC_INE

Semantica operacional de Lisp Semantica operacional de Lisp PuroPuro

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

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

J. M. Barreto UFSC_INE

Assignação e valor de atomoAssignação e valor de atomo• (set ‘a 10)A• (setq b 20)B• B20• ‘BB• (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

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

J. M. Barreto UFSC_INE

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

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

J. M. Barreto UFSC_INE

Operações aritméticasOperaçõ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...

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

J. M. Barreto UFSC_INE

Novas FunçõesNovas Funções

• (defun nome-da-função (variáveis ligadas)(corpo da definição))

• Corpos:– Cond– Program– if

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

J. M. Barreto UFSC_INE

Exemplos de novas funçõesExemplos 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)))))

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

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

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

J. M. Barreto UFSC_INE

ExercíciosExercí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?

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

J. M. Barreto UFSC_INE

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