SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
Paradigmas de Programação
Ronaldo F. Ramos
Instituto Federal do Ceará
6 de novembro de 2023
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
PARTE 3 - PARADIGMA FUNCIONAL
PROGRAMAÇÃO FUNCIONAL EM LISP
AULA 1/
2 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Roteiro
1 Histórico da Linguagem
2 Uso básico do Interpretador
3 Conceitos Básicos
4 Avaliação de Símbolos e Variáveis
5 Listas
6 Funções
3 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Histórico
• Inventada por John McCarthy em 1958 (MIT)
• Primeira implementação em um IBM 704 por Steve Russel
• Segunda Linguagem de Programação da História (1a é Fortran)
• Muito popular na área de pesquisa em IA nos EUA.
• Implementa o cálculo lambda criado por Alonzo Church (1903-1995)
• LISP = LISt Processing
4 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Dialeto Mais Popular
O dialeto Lisp mais popular é o CLisp que pode ser baixada de clisp.org. Pode ser
interpretada e/ou compilada
5 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Entrando e Saindo do Interpretador
1 clisp
2 (exit) ou (bye)
Para rodar um programa no interpretador
1 clisp <nome -programa >
2 clisp hello.lsp
Para compilar o programa
1 clisp -c hello.lsp -o hello # compila porém usa interpretador
para rodar.
6 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Hello World Cearense - Programa 001
Pode-se usar write, print ou format
1 (write "Queima raparigal")
Saída:
1 clisp 001 _alomundo.lsp
2 "Queima raparigal"
7 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Interagindo com o terminal (E/S) - Programa 002
1 (format t "Digite um número: ") ; Exibe uma mensagem para o
usuário
2 (setq numero (read)) ; Lê um número da entrada padrão (teclado)
3 (format t "Você digitou ~A.~%" numero) ; Exibe o número lido
Saída:
1 clisp 002 _terminal.lsp
2 Digite um número: 23
3 Você digitou 23.
8 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Operadores e Expressões Prefixadas
Exemplos de somas, subtrações e divisões:
1 [1]> (+ 2 3)
2 5
3 [2]> (+ 1.2 4.5)
4 5.7
5 [3]> (- 7 90)
6 -83
7 [4]> (* 3 4)
8 12
9 [5]> (/ 5 6)
10 5/6
11 [6]> (/ 5 6.0)
12 0.8333333
9 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Modo Debug
Ao encontrar um erro o interpretador entra no modo debug. Use quit para sair ou leia
as instruções e debug o programa.
10 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Átomos
• Elementos simples da linguagem
• Podem ser símbolos: a b c xx
• Podem ser constantes: 1 2 0.45 -4.3
• Símbolos podem ser associados a valores (variáveis)
• Valores numéricos podem ser inteiros, reais ou complexos #c(real imaginario)
11 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
NIL e T
• Os símbolos NIL e T são especiais.
• O átomo nil é usado para denotar o valor “falso”
• T denota o valor booleano “verdadeiro”, mas qualquer valor diferente de nil é
entendido como verdadeiro.
12 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Exemplo de NIL e T
Nil é falso e t é verdadeiro, mas qualquer outra coisa é avaliado como verdadeiro.
1 [3]> (<= 2 3)
2 T
3 [4]> (>= 3 4)
4 NIL
5 [5]> (and 2 T)
6 T
7 [6]> (and 2 NIL)
8 NIL
9 [7]>
13 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Avaliação dos Símbolos
Todos os símbolos que não são precedidos por apostrofo śão avaliados.
Ex.
1 [18]> b
2
3 *** - SYSTEM ::READ -EVAL -PRINT: variable B has no value
4 ...
5 [20]> ’b
6 B
7 [21]> nil
8 NIL
9 [22]> T
10 T
11 [23]>
14 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Atribuindo Valores a Variáveis
1 [43]> (setq a 2)
2 2
3 [44]> a
4 2
15 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Atribuição Temporária
Vejamos o que acontece uma atribuição temporária com retorno.
1 [11]> (setq a 3)
2 3
3 [11]> (let ((a 6)) a) ; atribuição temporária
4 6
5 [11]> a ; valor retornado ao anterior
6 3
7 [11]> (let ((b 5)) b) ; criando b
8 5
9 [11]> b ; b existe?
10 *** - SYSTEM ::READ -EVAL -PRINT: variable B has no value
16 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Funções Predefinidas
sqrt, sin, cos, tan, exp (expoente com base e) , expt (exponenciação com qualquer
base), ceiling, floor, mod, etc
17 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Listas
Definição
Uma lista é uma sequência de átomos ou listas entre parênteses após o uso da palavra
reservada list ou do apóstrofo ´
.
Ex.
1 [69]> (list 1 2 3 4 5)
2 (1 2 3 4 5)
3 [70]> ’(1 2 3 4 5)
4 (1 2 3 4 5)
5 [71]> (setq l (list 1 2 3 4 5))
6 (1 2 3 4 5)
7 [72]> (setq l ’(1 2 3 4 5))
8 (1 2 3 4 5)
18 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Funções que manipulam listas
• (car lista) retorna o primeiro elemento de lista.Um sinônimo de car é first.CAR =
Contents of Address Register.
• (cdr lista) retorna a lista sem o seu primeiro elemento. Um sinônimo de cdr é rest.
CDR= Contents of Decrement Register.
• Uma lista vazia () também pode ser escrita como NIL. NIL é tanto um átomo
como uma lista!
19 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Exemplo de Manipulação de Listas
1 [61]> (car l)
2 1
3 [62]> (first l)
4 1
5 [63]> (car ’(a b c d))
6 A
7 [64]> (cdr ’(a b c d))
8 (B C D)
9 [65]> (car (cdr ’(a b)))
10 B
20 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Listas são Pilhas
Listas podem ser manipuladas como pilhas
1 [34]> (setq l (list 1 2 3 4))
2 (1 2 3 4)
3 [35]> (push 0 l)
4 (0 1 2 3 4)
5 [36]> (pop l)
6 0
7 [37]> l
8 (1 2 3 4)
9 [38]>
21 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Conses
Cons é um elemento utilizado para manipulação de listas.
(cons elem lista) insere um elemento no inicio da lista retornando uma cópia da mesma.
1 [73]> (cons ’a ’(b c))
2 (A B C)
3 [74]> (cons ’a ’(b))
4 (A B)
5 [75]> (cons ’a nil)
6 (A)
7 [76]> (cons (car l) (cdr l))
8 (1 2 3 4 5)
22 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Usando cons com átomos
1 [77]> (cons ’a ’b)
2 (A . B)
O pontos nem sempre são impressos nos cons. Tudo que não é átomo é cons ou
expressão S. (S-expression). Um cons é um registro com dois campos ’(car cdr) ou
car.cdr. O ponto será omitido se um dos componentes é NIL.
23 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Exemplos de Cons
1 [78]> (cons ’a ’b)
2 (A . B)
3 [79]> ’(a . b)
4 (A . B)
5 [80]> ’(a . nil)
6 (A)
7 [81]> ’(a . (b . (c . nil)))
8 (A B C)
9 [82]> ’(a . (b . c))
10 (A B . C)
11 [83]> ’((a . b) . c)
12 ((A . B) . C)
13 [84]> ’((a . b) . (b . c))
14 ((A . B) B . C)
24 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Listas e Conses
Definição
NIL é uma lista.
Teorema
Se L é uma lista então (cons elem L) é uma lista.
Resumindo: Listas são conses sem pontos.
25 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Definindo funções
As funções são definidas com defun. Ex.
1 [56]> (defun test (a b) (* 2 (+ a b)))
2 TEST
3 [57]> (test 2 3)
4 10
5 [58]>
26 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Soma de Dois Números
1 [43]> (defun soma (x y) (+ x y))
2 SOMA
3 [44]> (soma 2 3)
4 5
5 [45]>
27 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Argumentos Nomeados
Toda palavra iniciada por dois pontos é considerada uma palavra-chave e pode ser
usada para nomear argumentos que serão posteriormente fornecidos para funções em
qualquer ordem.
Exemplo de definição de função que recebe lista de parâmetros nomeados:
1 (defun exemplo -funcao (&key parametro1 parametro2 parametro3)
2 (list parametro1 parametro2 parametro3))
A função poderá ser chamada com argumentos em qualquer ordem conquanto sejam
nomeados
1 (exemplo -funcao :parametro1 10 :parametro3 "texto")
28 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Condicional Simples
A sintaxe do if é:
(if condição retorno-caso-positivo retorno-caso-negativo)
Ex.:
1 (if t (print "tamos junto")
2 (print "vá se lascar"))
29 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Condicionais cond
• cond permite escrever funções que envolvem decisões.
• Forma geral:
(cond (bool1 expr1)
(bool2 expr2)
...
(boolN exprN)
)
• As expressões lógicas são avaliadas sucessivamente.
• Se boolI é verdadeira então o cond avalia e retorna exprI
• Se nenhuma expressão lógica for avaliada como verdadeira, o cond retorna nil
30 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Cond como if then else
(cond (bool1 expr1)
(bool2 expr2)
(bool3 expr3)
(t expr4))
É equivalente a:
if bool1 then expr1
else if bool2 then expr2
else if bool3 then expr3
else expr4
31 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Exemplo de Uso do Cond
1 [90]> (cond ((= 1 2) ’a)
2 ((> 2 3) ’b)
3 ((< 3 4) ’c))
4 C
5 [91]> (defun f (lista elem)
6 (cond ((eq lista nil) nil)
7 ((eq (car lista) elem) t)
8 (t (f (cdr lista) elem))
9 )
10 )
11 F
12 [92]> (f ’(a b c) ’c)
13 T
14 [93]> (f ’(a b c) ’d)
15 NIL
32 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Funções Recursivas
Exemplo de cálculo de fatorial de um número.
1 [45]> (defun fact (x)
2 (if (> x 0)
3 (* x (fact (- x 1)))
4 1
5 ) )
6 FACT
7 [46]> (fact 5)
8 120
33 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Funções Mutuamente Recursivas
As funções podem ser mutuamente recursivas. Ex.
1 [51]> (defun a (x) (if (= x 0) t (b (- x))))
2 A
3 [52]> (defun b (x) (if (> x 0) (a (- x 1)) (a (+ x 1))))
4 B
5 [53]> (a 5)
6 T
7 [54]>
34 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Funções com múltiplas expressões em seu corpo
O valor retornado será sempre o valor da última expressão calculada.
1 [54]> (defun bar (x)
2 (setq x (* x 3))
3 (setq x (/ x 2))
4 (+ x 4)
5 )
6 BAR
7 [55]> (bar 6)
8 13
9 [56]>
35 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Expressões Lógicas
• São montadas com o auxílio das funções que implementam os predicados
relacionais e lógicos tradicionais
• Predicados lógicos: and or not
• Predicados relacionais: > = < >= <=
• Argumentos devem ser números
• Para comparar símbolos usa-se o predicado eq ou null que verifica se uma
expressão é nula
• Para comparar conses estruturalmente usa-se o predicado equal
36 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Exemplos de Expressões Lógicas
1 [94]> (or (< 2 3) (> 2 3))
2 T
3 [95]> (= ’a ’b)
4
5 *** - =: A is not a number
6 ...
7 [97]> (eq ’a ’b)
8 NIL
9 [98]> (eq ’a ’a)
10 T
11 [99]> (eq ’(a b) ’(a b))
12 NIL
13 [100] > (equal ’(a b) ’(a b))
14 T
37 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Exercícios
Escreva as funções
1. (apaga L X)
Dada uma lista L e um elemento X , retorna L sem X. Se L não contém elem
inicialmente, retorna uma cópia exata de L
> (apaga ‘(a b c d a) ‘a)
(b c d)
2. (acresc L X Y)
Dada uma lista L, um elemento X e um elemento Y, retorna uma cópia de L onde
um Y é inserido depois de cada X
> (acresc ‘(a b c d a) ‘a ‘k)
(a k b c d a k)
38 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Solução Problema 1 - Programa 003
1 ; definição da função remove -elemento
2 (defun remove -elemento (elemento lista)
3 (cond
4 (( null lista) nil) ; Se a lista estiver vazia, retorne uma lista
vazia
5 ((eql elemento (car lista)) (remove -elemento elemento (cdr
lista))) ; Se o elemento for encontrado, pule -o
6 (t (cons (car lista) (remove -elemento elemento (cdr lista)))))) ;
Caso contrário, mantenha o elemento na nova lista
7 ; Exemplo de uso:
8 (setq lista -original ’(a b c d e f))
9 (setq nova -lista (remove -elemento ’d lista -original))
10 (print nova -lista)
39 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Saída do Problema 1 - Programa 003
1 clisp removeElemento.lsp
2 (A B C E F)
40 / 41
Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções
Solução do Problema 2 - Programa 004
1 (defun inserir -y-apos -x (l x y)
2 (if (null l) nil ; Se a lista estiver vazia, retorne uma lista vazia
3 (if (eql (car l) x)
4 (cons x (cons y (inserir -y-apos -x (cdr l) x y)))
5 (cons (car l) (inserir -y-apos -x (cdr l) x y)))))
6 ; Exemplo de uso:
7 (setq minha -lista ’(1 2 3 4 1 5 1 6))
8 (setq x 1)
9 (setq y 7)
10 (print (inserir -y-apos -x minha -lista x y))
41 / 41

Mais conteúdo relacionado

Semelhante a 01_lisp.pdf

LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
Rafael Martins
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
Rafael Martins
 

Semelhante a 01_lisp.pdf (20)

02_lisp.pdf
02_lisp.pdf02_lisp.pdf
02_lisp.pdf
 
02_lisp.pdf
02_lisp.pdf02_lisp.pdf
02_lisp.pdf
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos Básicos
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos Básicos
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxe
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxe
 

Mais de ronaldo ramos

Mais de ronaldo ramos (20)

javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdf
 
python_funcional.pdf
python_funcional.pdfpython_funcional.pdf
python_funcional.pdf
 
_001_introducao.pdf
_001_introducao.pdf_001_introducao.pdf
_001_introducao.pdf
 
paradigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdfparadigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdf
 
paradigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdfparadigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdf
 
paradigmas_de_programacao.pdf
paradigmas_de_programacao.pdfparadigmas_de_programacao.pdf
paradigmas_de_programacao.pdf
 
paradigmas_de_programacao_3_X.pdf
paradigmas_de_programacao_3_X.pdfparadigmas_de_programacao_3_X.pdf
paradigmas_de_programacao_3_X.pdf
 
python_funcional.pdf
python_funcional.pdfpython_funcional.pdf
python_funcional.pdf
 
40-aula40.pdf
40-aula40.pdf40-aula40.pdf
40-aula40.pdf
 
43-aula43.pdf
43-aula43.pdf43-aula43.pdf
43-aula43.pdf
 
48-aula48-modelosTemporais.pdf
48-aula48-modelosTemporais.pdf48-aula48-modelosTemporais.pdf
48-aula48-modelosTemporais.pdf
 
47-aula47-fuzzy-aplicacao.pdf
47-aula47-fuzzy-aplicacao.pdf47-aula47-fuzzy-aplicacao.pdf
47-aula47-fuzzy-aplicacao.pdf
 
46-aula46-fuzzy.pdf
46-aula46-fuzzy.pdf46-aula46-fuzzy.pdf
46-aula46-fuzzy.pdf
 
42-aula42.pdf
42-aula42.pdf42-aula42.pdf
42-aula42.pdf
 
39-aula39.pdf
39-aula39.pdf39-aula39.pdf
39-aula39.pdf
 
38-aula38.pdf
38-aula38.pdf38-aula38.pdf
38-aula38.pdf
 
36-aula36.pdf
36-aula36.pdf36-aula36.pdf
36-aula36.pdf
 
35-aula35.pdf
35-aula35.pdf35-aula35.pdf
35-aula35.pdf
 
34-aula34.pdf
34-aula34.pdf34-aula34.pdf
34-aula34.pdf
 
33-aula33.pdf
33-aula33.pdf33-aula33.pdf
33-aula33.pdf
 

Último

Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdfHistoria-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
andreaLisboa7
 

Último (20)

Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
 
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
 
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxEBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
 
BENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacional
BENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacionalBENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacional
BENEFÍCIOS DA NEUROPSICOPEDAGOGIA educacional
 
Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdf
 
662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica
 
Apostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdfApostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdf
 
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdfAs Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"
 
Poema - Aedes Aegypt.
Poema - Aedes Aegypt.Poema - Aedes Aegypt.
Poema - Aedes Aegypt.
 
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdfEnunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
 
Formação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSFormação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSS
 
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisNós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
 
MODELO Resumo esquemático de Relatório escolar
MODELO Resumo esquemático de Relatório escolarMODELO Resumo esquemático de Relatório escolar
MODELO Resumo esquemático de Relatório escolar
 
livro para educação infantil conceitos sensorial
livro para educação infantil conceitos sensoriallivro para educação infantil conceitos sensorial
livro para educação infantil conceitos sensorial
 
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdfHistoria-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
 
bem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalbem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animal
 
Poema - Maio Laranja
Poema - Maio Laranja Poema - Maio Laranja
Poema - Maio Laranja
 

01_lisp.pdf

  • 1. Paradigmas de Programação Ronaldo F. Ramos Instituto Federal do Ceará 6 de novembro de 2023
  • 2. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções PARTE 3 - PARADIGMA FUNCIONAL PROGRAMAÇÃO FUNCIONAL EM LISP AULA 1/ 2 / 41
  • 3. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Roteiro 1 Histórico da Linguagem 2 Uso básico do Interpretador 3 Conceitos Básicos 4 Avaliação de Símbolos e Variáveis 5 Listas 6 Funções 3 / 41
  • 4. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Histórico • Inventada por John McCarthy em 1958 (MIT) • Primeira implementação em um IBM 704 por Steve Russel • Segunda Linguagem de Programação da História (1a é Fortran) • Muito popular na área de pesquisa em IA nos EUA. • Implementa o cálculo lambda criado por Alonzo Church (1903-1995) • LISP = LISt Processing 4 / 41
  • 5. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Dialeto Mais Popular O dialeto Lisp mais popular é o CLisp que pode ser baixada de clisp.org. Pode ser interpretada e/ou compilada 5 / 41
  • 6. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Entrando e Saindo do Interpretador 1 clisp 2 (exit) ou (bye) Para rodar um programa no interpretador 1 clisp <nome -programa > 2 clisp hello.lsp Para compilar o programa 1 clisp -c hello.lsp -o hello # compila porém usa interpretador para rodar. 6 / 41
  • 7. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Hello World Cearense - Programa 001 Pode-se usar write, print ou format 1 (write "Queima raparigal") Saída: 1 clisp 001 _alomundo.lsp 2 "Queima raparigal" 7 / 41
  • 8. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Interagindo com o terminal (E/S) - Programa 002 1 (format t "Digite um número: ") ; Exibe uma mensagem para o usuário 2 (setq numero (read)) ; Lê um número da entrada padrão (teclado) 3 (format t "Você digitou ~A.~%" numero) ; Exibe o número lido Saída: 1 clisp 002 _terminal.lsp 2 Digite um número: 23 3 Você digitou 23. 8 / 41
  • 9. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Operadores e Expressões Prefixadas Exemplos de somas, subtrações e divisões: 1 [1]> (+ 2 3) 2 5 3 [2]> (+ 1.2 4.5) 4 5.7 5 [3]> (- 7 90) 6 -83 7 [4]> (* 3 4) 8 12 9 [5]> (/ 5 6) 10 5/6 11 [6]> (/ 5 6.0) 12 0.8333333 9 / 41
  • 10. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Modo Debug Ao encontrar um erro o interpretador entra no modo debug. Use quit para sair ou leia as instruções e debug o programa. 10 / 41
  • 11. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Átomos • Elementos simples da linguagem • Podem ser símbolos: a b c xx • Podem ser constantes: 1 2 0.45 -4.3 • Símbolos podem ser associados a valores (variáveis) • Valores numéricos podem ser inteiros, reais ou complexos #c(real imaginario) 11 / 41
  • 12. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções NIL e T • Os símbolos NIL e T são especiais. • O átomo nil é usado para denotar o valor “falso” • T denota o valor booleano “verdadeiro”, mas qualquer valor diferente de nil é entendido como verdadeiro. 12 / 41
  • 13. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Exemplo de NIL e T Nil é falso e t é verdadeiro, mas qualquer outra coisa é avaliado como verdadeiro. 1 [3]> (<= 2 3) 2 T 3 [4]> (>= 3 4) 4 NIL 5 [5]> (and 2 T) 6 T 7 [6]> (and 2 NIL) 8 NIL 9 [7]> 13 / 41
  • 14. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Avaliação dos Símbolos Todos os símbolos que não são precedidos por apostrofo śão avaliados. Ex. 1 [18]> b 2 3 *** - SYSTEM ::READ -EVAL -PRINT: variable B has no value 4 ... 5 [20]> ’b 6 B 7 [21]> nil 8 NIL 9 [22]> T 10 T 11 [23]> 14 / 41
  • 15. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Atribuindo Valores a Variáveis 1 [43]> (setq a 2) 2 2 3 [44]> a 4 2 15 / 41
  • 16. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Atribuição Temporária Vejamos o que acontece uma atribuição temporária com retorno. 1 [11]> (setq a 3) 2 3 3 [11]> (let ((a 6)) a) ; atribuição temporária 4 6 5 [11]> a ; valor retornado ao anterior 6 3 7 [11]> (let ((b 5)) b) ; criando b 8 5 9 [11]> b ; b existe? 10 *** - SYSTEM ::READ -EVAL -PRINT: variable B has no value 16 / 41
  • 17. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Funções Predefinidas sqrt, sin, cos, tan, exp (expoente com base e) , expt (exponenciação com qualquer base), ceiling, floor, mod, etc 17 / 41
  • 18. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Listas Definição Uma lista é uma sequência de átomos ou listas entre parênteses após o uso da palavra reservada list ou do apóstrofo ´ . Ex. 1 [69]> (list 1 2 3 4 5) 2 (1 2 3 4 5) 3 [70]> ’(1 2 3 4 5) 4 (1 2 3 4 5) 5 [71]> (setq l (list 1 2 3 4 5)) 6 (1 2 3 4 5) 7 [72]> (setq l ’(1 2 3 4 5)) 8 (1 2 3 4 5) 18 / 41
  • 19. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Funções que manipulam listas • (car lista) retorna o primeiro elemento de lista.Um sinônimo de car é first.CAR = Contents of Address Register. • (cdr lista) retorna a lista sem o seu primeiro elemento. Um sinônimo de cdr é rest. CDR= Contents of Decrement Register. • Uma lista vazia () também pode ser escrita como NIL. NIL é tanto um átomo como uma lista! 19 / 41
  • 20. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Exemplo de Manipulação de Listas 1 [61]> (car l) 2 1 3 [62]> (first l) 4 1 5 [63]> (car ’(a b c d)) 6 A 7 [64]> (cdr ’(a b c d)) 8 (B C D) 9 [65]> (car (cdr ’(a b))) 10 B 20 / 41
  • 21. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Listas são Pilhas Listas podem ser manipuladas como pilhas 1 [34]> (setq l (list 1 2 3 4)) 2 (1 2 3 4) 3 [35]> (push 0 l) 4 (0 1 2 3 4) 5 [36]> (pop l) 6 0 7 [37]> l 8 (1 2 3 4) 9 [38]> 21 / 41
  • 22. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Conses Cons é um elemento utilizado para manipulação de listas. (cons elem lista) insere um elemento no inicio da lista retornando uma cópia da mesma. 1 [73]> (cons ’a ’(b c)) 2 (A B C) 3 [74]> (cons ’a ’(b)) 4 (A B) 5 [75]> (cons ’a nil) 6 (A) 7 [76]> (cons (car l) (cdr l)) 8 (1 2 3 4 5) 22 / 41
  • 23. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Usando cons com átomos 1 [77]> (cons ’a ’b) 2 (A . B) O pontos nem sempre são impressos nos cons. Tudo que não é átomo é cons ou expressão S. (S-expression). Um cons é um registro com dois campos ’(car cdr) ou car.cdr. O ponto será omitido se um dos componentes é NIL. 23 / 41
  • 24. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Exemplos de Cons 1 [78]> (cons ’a ’b) 2 (A . B) 3 [79]> ’(a . b) 4 (A . B) 5 [80]> ’(a . nil) 6 (A) 7 [81]> ’(a . (b . (c . nil))) 8 (A B C) 9 [82]> ’(a . (b . c)) 10 (A B . C) 11 [83]> ’((a . b) . c) 12 ((A . B) . C) 13 [84]> ’((a . b) . (b . c)) 14 ((A . B) B . C) 24 / 41
  • 25. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Listas e Conses Definição NIL é uma lista. Teorema Se L é uma lista então (cons elem L) é uma lista. Resumindo: Listas são conses sem pontos. 25 / 41
  • 26. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Definindo funções As funções são definidas com defun. Ex. 1 [56]> (defun test (a b) (* 2 (+ a b))) 2 TEST 3 [57]> (test 2 3) 4 10 5 [58]> 26 / 41
  • 27. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Soma de Dois Números 1 [43]> (defun soma (x y) (+ x y)) 2 SOMA 3 [44]> (soma 2 3) 4 5 5 [45]> 27 / 41
  • 28. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Argumentos Nomeados Toda palavra iniciada por dois pontos é considerada uma palavra-chave e pode ser usada para nomear argumentos que serão posteriormente fornecidos para funções em qualquer ordem. Exemplo de definição de função que recebe lista de parâmetros nomeados: 1 (defun exemplo -funcao (&key parametro1 parametro2 parametro3) 2 (list parametro1 parametro2 parametro3)) A função poderá ser chamada com argumentos em qualquer ordem conquanto sejam nomeados 1 (exemplo -funcao :parametro1 10 :parametro3 "texto") 28 / 41
  • 29. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Condicional Simples A sintaxe do if é: (if condição retorno-caso-positivo retorno-caso-negativo) Ex.: 1 (if t (print "tamos junto") 2 (print "vá se lascar")) 29 / 41
  • 30. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Condicionais cond • cond permite escrever funções que envolvem decisões. • Forma geral: (cond (bool1 expr1) (bool2 expr2) ... (boolN exprN) ) • As expressões lógicas são avaliadas sucessivamente. • Se boolI é verdadeira então o cond avalia e retorna exprI • Se nenhuma expressão lógica for avaliada como verdadeira, o cond retorna nil 30 / 41
  • 31. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Cond como if then else (cond (bool1 expr1) (bool2 expr2) (bool3 expr3) (t expr4)) É equivalente a: if bool1 then expr1 else if bool2 then expr2 else if bool3 then expr3 else expr4 31 / 41
  • 32. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Exemplo de Uso do Cond 1 [90]> (cond ((= 1 2) ’a) 2 ((> 2 3) ’b) 3 ((< 3 4) ’c)) 4 C 5 [91]> (defun f (lista elem) 6 (cond ((eq lista nil) nil) 7 ((eq (car lista) elem) t) 8 (t (f (cdr lista) elem)) 9 ) 10 ) 11 F 12 [92]> (f ’(a b c) ’c) 13 T 14 [93]> (f ’(a b c) ’d) 15 NIL 32 / 41
  • 33. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Funções Recursivas Exemplo de cálculo de fatorial de um número. 1 [45]> (defun fact (x) 2 (if (> x 0) 3 (* x (fact (- x 1))) 4 1 5 ) ) 6 FACT 7 [46]> (fact 5) 8 120 33 / 41
  • 34. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Funções Mutuamente Recursivas As funções podem ser mutuamente recursivas. Ex. 1 [51]> (defun a (x) (if (= x 0) t (b (- x)))) 2 A 3 [52]> (defun b (x) (if (> x 0) (a (- x 1)) (a (+ x 1)))) 4 B 5 [53]> (a 5) 6 T 7 [54]> 34 / 41
  • 35. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Funções com múltiplas expressões em seu corpo O valor retornado será sempre o valor da última expressão calculada. 1 [54]> (defun bar (x) 2 (setq x (* x 3)) 3 (setq x (/ x 2)) 4 (+ x 4) 5 ) 6 BAR 7 [55]> (bar 6) 8 13 9 [56]> 35 / 41
  • 36. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Expressões Lógicas • São montadas com o auxílio das funções que implementam os predicados relacionais e lógicos tradicionais • Predicados lógicos: and or not • Predicados relacionais: > = < >= <= • Argumentos devem ser números • Para comparar símbolos usa-se o predicado eq ou null que verifica se uma expressão é nula • Para comparar conses estruturalmente usa-se o predicado equal 36 / 41
  • 37. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Exemplos de Expressões Lógicas 1 [94]> (or (< 2 3) (> 2 3)) 2 T 3 [95]> (= ’a ’b) 4 5 *** - =: A is not a number 6 ... 7 [97]> (eq ’a ’b) 8 NIL 9 [98]> (eq ’a ’a) 10 T 11 [99]> (eq ’(a b) ’(a b)) 12 NIL 13 [100] > (equal ’(a b) ’(a b)) 14 T 37 / 41
  • 38. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Exercícios Escreva as funções 1. (apaga L X) Dada uma lista L e um elemento X , retorna L sem X. Se L não contém elem inicialmente, retorna uma cópia exata de L > (apaga ‘(a b c d a) ‘a) (b c d) 2. (acresc L X Y) Dada uma lista L, um elemento X e um elemento Y, retorna uma cópia de L onde um Y é inserido depois de cada X > (acresc ‘(a b c d a) ‘a ‘k) (a k b c d a k) 38 / 41
  • 39. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Solução Problema 1 - Programa 003 1 ; definição da função remove -elemento 2 (defun remove -elemento (elemento lista) 3 (cond 4 (( null lista) nil) ; Se a lista estiver vazia, retorne uma lista vazia 5 ((eql elemento (car lista)) (remove -elemento elemento (cdr lista))) ; Se o elemento for encontrado, pule -o 6 (t (cons (car lista) (remove -elemento elemento (cdr lista)))))) ; Caso contrário, mantenha o elemento na nova lista 7 ; Exemplo de uso: 8 (setq lista -original ’(a b c d e f)) 9 (setq nova -lista (remove -elemento ’d lista -original)) 10 (print nova -lista) 39 / 41
  • 40. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Saída do Problema 1 - Programa 003 1 clisp removeElemento.lsp 2 (A B C E F) 40 / 41
  • 41. Histórico da Linguagem Uso básico do Interpretador Conceitos Básicos Avaliação de Símbolos e Variáveis Listas Funções Solução do Problema 2 - Programa 004 1 (defun inserir -y-apos -x (l x y) 2 (if (null l) nil ; Se a lista estiver vazia, retorne uma lista vazia 3 (if (eql (car l) x) 4 (cons x (cons y (inserir -y-apos -x (cdr l) x y))) 5 (cons (car l) (inserir -y-apos -x (cdr l) x y))))) 6 ; Exemplo de uso: 7 (setq minha -lista ’(1 2 3 4 1 5 1 6)) 8 (setq x 1) 9 (setq y 7) 10 (print (inserir -y-apos -x minha -lista x y)) 41 / 41