cÁlculo lambda

61
J.M.Barreto INE-CTC- UFSC CÁLCULO LAMBDA CÁLCULO LAMBDA Base da programação funcional e um modelo alternativo de computabilidade. Inventor: Alonzo Church

Upload: hagop

Post on 17-Jan-2016

78 views

Category:

Documents


2 download

DESCRIPTION

CÁLCULO LAMBDA. Base da programação funcional e um modelo alternativo de computabilidade. Inventor: Alonzo Church. Modelos de Computabilidade. Máquina de Turing (Alain Turing- 1936) Lambda cálculo (Alonzo Church - 1936) Linguagens While (Michael Arbib-1982) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CÁLCULO LAMBDA

J.M.Barreto INE-CTC-UFSC

CÁLCULO LAMBDACÁLCULO LAMBDA

Base da programação funcional e um modelo alternativo de

computabilidade.

Inventor: Alonzo Church

Page 2: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Modelos de ComputabilidadeModelos de Computabilidade

• Máquina de Turing (Alain Turing- 1936)

• Lambda cálculo (Alonzo Church - 1936)

• Linguagens While (Michael Arbib-1982)

Alan Turing provou em 1937 a equivalência entre uma Máquina de Turing e o Cálculo Lambda em termos de computabilidade

Page 3: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

A. Church, Washington1903

Doutor pela Universidade de Princepton. Após seu doutoramento foi para Harvard trabalhar com Birkhoff e Huntington. E foi nesta época em que Birkhoff e ele tiveram discussões que resultaram na Teoria das Categorias como a conhecemos hoje. Trabalhou até 1990 quando com oitenta e sete anos parou de dar aulas mas continuou a orientar alguns pesquisadores selecionados, Turing tendo sido um de seus doutorandos.

Page 4: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Programaçãp Funcional (1/2)Programaçãp Funcional (1/2)

• A maioria das Linguagens de Programação Funcional são semelhantes e diferem somente em aspectos sintáticos. O Cálculo lambda pode ser considerado como a ferramenta mais adequada a escrever programas usando o paradigma funcional. Neste paradigma, em que a solução de um problema é considerada como sendo implementar uma função, usa nesta implementação um conjunto de primitivas e regras de construir novas funções a partir destas primitivas.

Page 5: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Programação Funcional (2/2)Programação Funcional (2/2)

• Interessantes pela sua simplicidade sintática

• Facilidade de escrever problemas recursivos.

• Maioria das implementações são poucos aceitas devido à ineficiência em comparação com linguagens de programação comuns.

• Novas implementações de interpretadores e/ou compiladores e novas linguagens mais modernas tem surgido.

Page 6: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Exemplos de Linguagens Exemplos de Linguagens FuncionaisFuncionais

- LISP (LISt Processing - década de 60). Muito simples em muitos aspectos. É a mais utilizada devendo continuar por muito tempo.

- Miranda (Turner 1985)

- Haskell (1990)

- Orwell (Wadler 1985)

- Outras: ML, KRC, LML, SASL.

Page 7: CÁLCULO LAMBDA

J.M.Barreto INE-CTC-UFSC

Sintaxe do Cálculo LambdaSintaxe do Cálculo Lambda

O cálculo lambda pode ter sua sintaxe definida como um sistema formal.

Page 8: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Termos do Cálculo LambdaTermos do Cálculo Lambda

• A linguagem do cálculo lambda usa um alfabeto constituído de:

• - um conjunto de variáveis: vo, v1, v2,....vn....

• - abstrator (lambda)

• - agrupadores (,)

• Ao conjunto de cadeias finitas sobre denota-se por * e a cadeia que não contem elementos por Usam-se as variáveis x, y, z, ... para denotar cadeias de*

Page 9: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Cadeias de Símbolos: definiçõesCadeias de Símbolos: definições

• Definição (Equivalência de duas cadeias)

• Duas cadeias x e y são equivalentes e se escreve (x,y) Eq x = y

• Definição (Comprimento de uma cadeia)

• É uma função:

: * Z+

• em que o número inteiro exprime o número de elementos da cadeia.

Page 10: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Termo Lambda: definiçãoTermo Lambda: definição

• Um termo lambda, denotado pelas letras M, N, O, P,.. é um elemento da linguagem , onde *  definido da seguinte forma:

• - vi é termo lambda;

• - dado M, (vi M) é termo lambda;

• - dados dois termos lambda M, N então (MN) é termo lambda;

• - e nada mais é termo lambda.

Page 11: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Exemplos de Termos lambdaExemplos de Termos lambda

• Verificar quais das expressões abaixo são termos lambda, justificando sua resposta:

• vo

• (vov1)

• (vo)

• (vo(vov1))

• (v1(vo(v1(vov1))))

• (vo(vov1)

Page 12: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Notacão Lambda SimplificadaNotacão Lambda Simplificada

• 1-Precedência a esquerda. ((MN)L) MNL• 2-Sucessão de abstratores:• Assim (x(y(z........))) xyz...• 3-Separador: usa-se um ponto para designar o

final de uma lista de argumentos lambda• Assim x.xy.y (x(x(y.y)))• 4-Supõe-se que letras diferentes designam

entidades diferentes. • Assim x y em x.y

Page 13: CÁLCULO LAMBDA

J.M.Barreto INE-CTC-UFSC

Semântica Operacional do Semântica Operacional do Cálculo Cálculo

Até agora foi descrita a sintaxe do cálculo-. Sua semântica operacional diz como um

programa Lambda opera, isto é, calcula.

Page 14: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

O Porque da Semântica:O Porque da Semântica:

• Para chamá-lo de "cálculo'', deve-se porém dizer como "calcular'' com ele. Basicamente isto é

realizado através de três regras de conversão, que descrevem como converter uma expressão- em

outra que lhe seja equivalente. • Mostra também como se introduzem os argumentos a serem usados como dados do

programa.

Page 15: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Programa LambdaPrograma Lambda

• Um programa Lambda se escreve como um conjunto de expressões lambda. Normalmente, usando notação simplificada encontra-se o símbolo lambda seguido de lista de variáveis. limitando estas variáveis vem um ponto ".'' seguido pelo corpo da função. As variáveis são chamadas de parâmetros formais e diz-se que o lambda os liga. Exemplo:

xy.(+ x y)

Page 16: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Programa LambdaPrograma Lambda

• Os dados são escritos logo depois da função lambda, como uma lista e são consumidos durante a operação do programa.

• Exemplos:– > (xy. (y x)) dia bom– > (xy. (+ x y)) 3 6– > (xy. (x y z)) 3 1 4 5

Page 17: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Executar Programa LambdaExecutar Programa Lambda

• Para executar um programa lambda é suficiente dar valores às variáveis lambda. Assim tem-se:

• xy.(+ x y) 3 4• y.(+ 3 y) 4• (+ 3 4)• 7 • Nota: geralmente operadores são pré-fxados. Isto na

realidade é uma conversão de uma expressão em uma mais simples. Há 3 tipos de conversão.

Page 18: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Funções embutidasFunções embutidas

• Funções embutidas como + não existem no cálculo lambda na sua forma mais pura. Para fins práticos, uma extensão que as suporte é útil. Estas incluem funções aritméticas (como +, -, *, /), constantes (como 0, 1,...), funções lógicas (como E, OU, NÃO,...), constantes lógicas (VERDADE, FALSO), manipulação de listas (PRIMEIRO, CAUDA, CONSTRUA, IGUAL) e reconhecedoras de listas (ATOM).

Page 19: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Avaliação de programa lambdaAvaliação de programa lambda

• A avaliação ocorre através da seleção repetida de uma expressão redutível (redex) e de sua redução. Expressão redutível é aquela que pode ser avaliada imediatamente. No exemplo :

• (+ (* 5 6) (* 8 3))• Que são: (* 5 6) e (* 8 3)• A escolha do primeiro redex para redução fornece:

• (+ (* 5 6) (* 8 3)) -> (+ 30 (* 8 3))

• Do qual resulta: (+ 30 24) -> 54

Page 20: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Regras de ConversãoRegras de Conversão

• Introdução à -conversão: Variáveis atadas e livres

• Conversão-Alfa ()• Conversão-Beta (ß)• Conversão-Eta ()

• Provas de Interconvertibilidade

Page 21: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Variáveis atadas e livres(1/2)Variáveis atadas e livres(1/2)

• Seja a expressão-: (x. + x y) 4

• Para avaliar esta expressão é necessário: • saber o valor "global'' de y. • não é necessário saber o valor global de x,

pois é o parâmetro formal da função.

• x ocorre atado pelo x, y não é atado por nenhum e assim ocorre livre na expressão.

Page 22: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Variáveis atadas e livres (2/2)Variáveis atadas e livres (2/2)

• .A ocorrência de uma variável é atada se há uma expressão- envolvente que a amarra, senão é livre.

• No exemplo a seguir, x e y ocorrem atados, z porém, ocorre livre:

• x. + ((y. + y z) 7) x • Observe que os termos atado e livre se referem a

ocorrências específicas da variável em uma expressão. Note ainda que x é atado mas não sabe-se seu valor para calcular a expressão-

Page 23: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Conversão AlfaConversão Alfa

• Usa a-congruência: duas expressões- M e N são -congruentes (ou -equivalentes), denotado por M N se ou

• M = N ou • MN, ou

• N é obtido de M através da reposição de uma sub-expressão S de M por uma expressão- T tal que S T, ou existe alguma expressão- R tal que M R e R N.

Page 24: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Conversão Alfa: exemplosConversão Alfa: exemplos

Exemplo 1:

Nomes de parâmetros

formais podem não ser

únicos:

(x.(x. + (- x 1)) x 3) 9

(x. + (- x 1)) 9 3

+ (- 9 1) 3

11

Exemplo 2:

(xy.+ x ((x.- x 3) y)) 5 6

(y.+ 5 ((x.- x 3) y)) 6

+ 5 ((x.- x 3) 6)

+ 5 (- 6 3)

8

Page 25: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Conversão Alfa: exemplosConversão Alfa: exemplos

Exemplo 3:

(x. (y. - y x)) 4 5

(y. - y 4) 5

- 5 4

1

Exemplo 4:

Crie um exemplo semelhante aos 3

anteriores.

Page 26: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Conversão betaConversão beta

• Conversão beta consiste na substituição de uma variável ligada pelo valor que foi justaposto `a definição da função.

• Exemplo: (x. + x 1) 4

+ 4 1

5

Page 27: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Conversão BetaConversão Beta

• O parâmetro formal pode ocorrer várias vezes no corpo:

• (x. + x x) 5• + 5 5 • 10

• Pode não haver ocorrências do parâmetro formal no corpo. Ex:

• (x. 3) 5 3 • Nada a converter!

Uma variável pode possuir tanto uma ocorrência atada como uma livre em uma expressão. Considere o exemplo:

+ x ((x. + x 1) 4) Aqui x ocorre livre (a primeira vez) e atada (a segunda).

Page 28: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Conversão etaConversão eta

• Sejam: (x. + 1 x) e (+ 1). Estas expressões se comportam exatamente da mesma maneira, quando aplicadas a um argumento: ambas adicionam 1 ao argumento. Conversão- é o nome dado à regra que expressa essa equivalência. Assim: (x. + 1 x) -> (+ 1)

Formalmente: (x. F x) -> F

desde que x não ocorra livre em F e F denote uma função.

Page 29: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Conversão etaConversão eta

A condição de que x não deve ocorrer livre em em F previne conversões errôneas. Exemplo:

(x. + x x) não é -conversível para (+ x)

pois x ocorre livre em (+ x).

Os dois x são ligados. Assim:• (x. + x x) 5 ( + 5 5) 10

Page 30: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Teorremas de Church-RosserTeorremas de Church-Rosser

Page 31: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Teoremas de Church-RosserTeoremas de Church-Rosser

0

10

20

30

40

50

60

70

80

90

1st Qtr 2nd Qtr 3rd Qtr 4th Qtr

EastWestNorth

Page 32: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Teoremas de Church-RosserTeoremas de Church-Rosser

Page 33: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Funções RecursivasFunções Recursivas

• No Cálculo lambda as funções não tem nomes.• Cálculo lambda é a base da programação

funcional.• Um dos mecanismos mais importantes usados em

programação funcional é a recursividade.• Recursividade exige que se nomeie funções para

que possam ser referenciadas.• E agora? (Fico vermelho de vergonha!)

Page 34: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Recursividade: exemplo Recursividade: exemplo introdutóriointrodutório

• Suponha existir a primitiva SE com duas direções e seja a abstração:

• (xn. SE (= n 0) (1) (* n x (-n 1)))• Vamos dar o nome de FAC à aplicação desta

abstração à FAC; tem-se:• FAC = (xn. SE (= n 0) (1) (* n x (-n 1))) FAC =

(n. SE (= n 0) (1) (* n FAC (-n 1)))• Que é a definição recursiva desejada.

Page 35: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Transformação Transformação ao inverso ao inverso

Se já fosse disponível a definição recursiva:

• Seja F = (x …. F….)

• Usando Transformação ao contrário:

• F = (f … (x . f….))F

• Ou: F = H F onde H = (f … (x . f….))

F é dito ponto fixo de H

Page 36: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Combinador de Ponto FixoCombinador de Ponto Fixo

Para isto, invente-se, a título provisório, uma função Y, a qual toma uma função como argumento e devolve o seu ponto fixo como resultado. Logo será: YH = F

Substituindo F por YH em F = H F tem-se:

YH = H (YH)Esta é uma definição não recursiva de F!

Page 37: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Exercício: Fac 1Exercício: Fac 1• FAT = Y H onde:• H = (fat. n. SE (= n 0) 1 (* n (fat (- n 1)))) • Assim: FAT 1• Y H 1• H (Y H) 1• (fat. n.SE (= n 0) 1 (* n (fat (- n 1))))(Y H) 1• ( n.SE (= n 0) 1 (* n (Y H (- n 1)))) 1• SE (= 1 0) 1 (* 1 (Y H (- 1 1)))• * 1 (Y H 0) = * 1 (H (Y H) 0)• = * 1 ((fat.n.SE (= n 0)1(* n(fat(- n 1))))(Y H) 0)• * 1 ((n.SE (= n 0) 1 (* n (Y H (- n 1)))) 0)• * 1 (SE (= 0 0) 1 (* n (Y H(- 0 1))))• 1

Page 38: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Exercícios (Redução)Exercícios (Redução)

Page 39: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

Exercícios (Recursividade)Exercícios (Recursividade)

Page 40: CÁLCULO LAMBDA

J. M. Barreto UFSC_INE

E se estas coisas fossem usadas E se estas coisas fossem usadas em uma linguagem real?em uma linguagem real?

Esta linguagem existe e é LISP!

LISP é linguagem velha: tem 40 anos...

Mas LISP se mantem jóvem pois LISP é estensível, suporta programação

objeto e icônica!

Page 41: CÁLCULO LAMBDA

J.M.Barreto INE-CTC-UFSC

Noções de lispNoções de lisp

Lisp: LISp Processing

Page 42: CÁLCULO LAMBDA

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 ér 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 43: CÁLCULO LAMBDA

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 44: CÁLCULO LAMBDA

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 45: CÁLCULO LAMBDA

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 46: CÁLCULO LAMBDA

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 47: CÁLCULO LAMBDA

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 48: CÁLCULO LAMBDA

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 49: CÁLCULO LAMBDA

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 50: CÁLCULO LAMBDA

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 51: CÁLCULO LAMBDA

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 52: CÁLCULO LAMBDA

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 53: CÁLCULO LAMBDA

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 54: CÁLCULO LAMBDA

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 55: CÁLCULO LAMBDA

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 56: CÁLCULO LAMBDA

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 57: CÁLCULO LAMBDA

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 58: CÁLCULO LAMBDA

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 59: CÁLCULO LAMBDA

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 60: CÁLCULO LAMBDA

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 61: CÁLCULO LAMBDA

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!