SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Paradigmas de Programação
Ronaldo F. Ramos
Instituto Federal do Ceará
11 de novembro de 2023
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
PARTE 3 - PARADIGMA FUNCIONAL
PROGRAMAÇÃO FUNCIONAL EM LISP
AULA 3
2 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Roteiro
1 Elementos Intrínsecos de Programação Funcional
2 Ordenamento
3 Igualdade e Identidade
4 Funções para listas
3 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Funcall
Chama uma função passando seus argumentos.
1 (defun soma (x y) (+ x y))
2 SOMA
3 > (soma 2 3)
4 5
5 > (funcall #’soma 2 3)
6 5
4 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Apply
Apply é semelhante a Funcall, exceto que seu argumento final deverá ser uma lista. Os
elementos desta lista são tratados como se fossem argumentos adicionais ao Funcall.
1 > (apply #’soma ’(5 6))
2 11
3 > (apply #’+ 3 4 ’(3 4))
4 14
5 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Maps - mapcar
O primeiro argumento a mapcar deve ser uma função de um argumento. mapcar aplica
esta função a cada elemento de uma lista dada e coleta os resultados em uma outra
lista.
1 > (defun dobro (x) (* 2 x))
2 DOBRO
3 > (dobro 2)
4 4
5 > (mapcar #’dobro ’(1 2 3 4))
6 (2 4 6 8)
7 > (mapcar #’not ’(t nil t nil t nil))
8 (NIL T NIL T NIL T)
6 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Funções Lambda
Funções anônimas temporárias.
1 (setq quadrado (lambda (x) (* x x)))
2 #<FUNCTION :LAMBDA (X) (* X X)>
3 [15]> (funcall quadrado 2)
4 4
5 >#’(lambda (x) (+ x 3))
6 #<FUNCTION :LAMBDA (X) (+ X 3)>
7 > (funcall * 5) ;observe que neste contexto o * é uma
8 ;variável que representa o último form
9 ;que foi digitado..
10 8
7 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Lambda com Mapcar
A combinação de lambda e mapcar pode substituir muitos laços. Por exemplo, os dois
forms seguintes são equivalentes:
1 > (do ((x ’(1 2 3 4 5) (cdr x))
2 (y nil))
3 (( null x) (reverse y))
4 (push (+ (car x) 2) y)
5 )
6 (3 4 5 6 7)
7 > (mapcar #’(lambda (x) (+ x 2)) ’(1 2 3 4 5))
8 (3 4 5 6 7)
8 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Ordenamento
LISP provê duas primitivas para ordenação: sort e stable-sort.
1 > (sort ’(2 1 5 4 6) #’<)
2 (1 2 4 5 6)
3 > (sort ’(2 1 5 4 6) #’>)
4 (6 5 4 2 1)
O primeiro argumento para sort é uma lista, o segundo é a função de comparação. A
função de comparação não garante estabilidade.
9 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Ordenamento Estável
A função stable-sort é exatamento como sort, só que ela garante que dois elementos
equivalentes vão aparecer na lista ordenada exatamente na mesma ordem em que
aparecem lista original.
1 >(stable -sort ’(2 1 5 4 6) #’>)
2 (6 5 4 2 1)
3 > (stable -sort ’(2 1 5 4 6) #’<)
4 (1 2 4 5 6)
Atenção: O sort pode modificar ou apagar a lista original. Para fazer cópias use
copy-list ou copy-seq
10 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Copiando a Lista
1 >(setq nova (copy -list ’(1 2 3 4)))
2 (1 2 3 4)
3 ; outra forma
4 > (setq nova (copy -seq ’(1 2 3 4)))
5 (1 2 3 4)
6 > nova
7 (1 2 3 4)
11 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Igualdade e Identidade
Dois símbolos são eq se e somente se eles forem idênticos (identidade). Duas cópias da
mesma lista não são eq (são dois objetos diferentes) mas são equal (iguais).
1 > (eq ’a ’a)
2 T
3 > (eq ’a ’b)
4 NIL
5 > (= 3 4)
6 NIL
7 > (eq ’(a b c) ’(a b c))
8 NIL
9 > (equal ’(a b c) ’(a b c))
10 T
11 > (eql ’a ’a)
12 T
13 > (eql 3 3)
14 T
12 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Igualdade e Identidade
Detalhes:
• O predicado eql é equivalente a eq para símbolos e a = para números. É a
identidade que serve tanto para números como para símbolos.
• O predicado equal é equivalente eql para símbolos e números. Ele é verdadeiro
para dois conses, se e somente se, seus cars são equal e seus cdrs são equal. Ele é
verdadeiro para duas estruturas se e somente se as estruturas forem do mesmo
tipo e seus campos correspondentes forem equal.
13 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Exemplos de Igualdade e Identidade
Mais exemplos:
1 >(setq X ’(A B))
2 (A B)
3 > (setq Y ’(A B))
4 (A B)
5 > (equal X Y) ;X e Y são iguais
6 T
7 > (eq X Y) ;X e Y não são idênticos
8 NIL
14 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Append
A função append adiciona uma lista ou elemento à outra.
1 >(append ’(1 2 3) ’(4 5 6))
2 (1 2 3 4 5 6)
15 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Reverse
Reverte os elementos de uma lista.
1 > (reverse ’(1 2 3))
2 (3 2 1)
16 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
member
Verifica se um elemento é menbro de uma lista.
1 > (member ’a ’(b d a c))
2 (A C)
3 > (member ’e ’(b d a c))
4 NIL
17 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
find
Encontra um elemento ou uma sublista em uma lista. A sua sintaxe é
(find item lista :key funcao :test predicado)
• item é o elemento a encontrar
• lista é a lista onde vamos procurar o elemento
• funcao :key é uma função opcional que aplica uma transformação aos elementos
da lista antes de compará-los
• :test é um predicado opcional que especifica como comparar os elementos.
18 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Exemplos de find
Encontrar o número 5 na lista (1 2 3 4 5 6 7)
1 (find 5 ’(1 2 3 4 5 6 7))
2 5
Encontrar o número 5 na lista ((1 2) (3 4) (5 6) (7 8)), que é uma lista de listas.
1 > (find 5 ’((1 2) (3 4) (5 6) (7 8)) :key #’car)
2 (5 6)
Encontrar múltiplo de 5 na lista 10 20 30 40 50 60 70).
1 >(find 5 ’(10 20 30 40 50 60 70) :test #’= :key #’(lambda (x) (/
x 10)))
2 50
19 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
subsetp
Verificação de subconjunto.
1 >(subsetp ’(a b) ’(a d e))
2 NIL
3 > (subsetp ’(a d) ’(a d e))
4 T
20 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
union intersection difference
União,interseção e diferença de conjuntos.
1 >(union ’(a) ’(b))
2 (A B)
3 >(intersection ’(a b c) ’(b))
4 (B)
5 > (set -difference ’(a b) ’(a))
6 (B)
Subsetp, intersection, union, e set-difference todos assumem que cada argumento não
contém elementos duplicados. Eles também podem todos tomar um argumento :test.
Por default, todos usam eql.
21 / 22
Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas
Exercícios
1. Escreva uma função que leia do usuário uma lista de produtos e seus respectivos
preços, colocando-os em uma lista organizada por pares produto-preço. A entrada
de dados é finalizada digitando-se a palavra ‘fim ao invés de um nome de produto.
Utilize o comando loop para implementar o laço de leitura e defina uma variável
global onde a lista ficará armazenada ao fim da leitura.
2. Escreva uma função ou conjunto de funções, que, através de um menu de opções,
realizem as seguintes tarefas: a) Pesquisar preço de um produto em lista de preços
e produtos. b) Mostrar em ordem alfabética toda a lista de produtos disponíveis
com os respectivos preços, formatada na tela. c) Fazer compras: Um ambiente
onde o usuário pode entrar com nomes de produtos e quantidades que deseja
comprar.
22 / 22

Mais conteúdo relacionado

Semelhante a 03_lisp.pdf

Programação Funcional com Java 8
Programação Funcional com Java 8Programação Funcional com Java 8
Programação Funcional com Java 8Cristian R. Silva
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig LatinElen Arantza
 
53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-iEdvan Mateó
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxMarceloRosenbrock1
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
Tutorial formulas excell
Tutorial formulas excellTutorial formulas excell
Tutorial formulas excellgusmao2010
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptJoberthSilva
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Filipe Chagas Ferraz
 
3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics3º Fast Show - SQL Analytics
3º Fast Show - SQL Analyticsqualidatavix
 
4234 mysql
4234 mysql4234 mysql
4234 mysqlherbam
 

Semelhante a 03_lisp.pdf (20)

Programação Funcional com Java 8
Programação Funcional com Java 8Programação Funcional com Java 8
Programação Funcional com Java 8
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i53297189 apostila-algoritmo-e-logica-i
53297189 apostila-algoritmo-e-logica-i
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Aula 7 aed - sub algoritmos
Aula 7   aed - sub algoritmosAula 7   aed - sub algoritmos
Aula 7 aed - sub algoritmos
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Slide_Python.pdf
Slide_Python.pdfSlide_Python.pdf
Slide_Python.pdf
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Tutorial formulas excell
Tutorial formulas excellTutorial formulas excell
Tutorial formulas excell
 
Mapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.pptMapeamento de Objetos para o Modelo Relacional.ppt
Mapeamento de Objetos para o Modelo Relacional.ppt
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
Pequenas Aulas De Excel - 05
Pequenas Aulas De Excel - 05Pequenas Aulas De Excel - 05
Pequenas Aulas De Excel - 05
 
Standard ML / CPN ML
Standard ML / CPN MLStandard ML / CPN ML
Standard ML / CPN ML
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
 
Lp m2(parte4)
Lp m2(parte4)Lp m2(parte4)
Lp m2(parte4)
 
3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
4234 mysql
4234 mysql4234 mysql
4234 mysql
 

Mais de ronaldo ramos

javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdfronaldo ramos
 
python_funcional.pdf
python_funcional.pdfpython_funcional.pdf
python_funcional.pdfronaldo ramos
 
paradigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdfparadigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdfronaldo ramos
 
paradigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdfparadigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdfronaldo ramos
 
paradigmas_de_programacao.pdf
paradigmas_de_programacao.pdfparadigmas_de_programacao.pdf
paradigmas_de_programacao.pdfronaldo ramos
 
paradigmas_de_programacao_3_X.pdf
paradigmas_de_programacao_3_X.pdfparadigmas_de_programacao_3_X.pdf
paradigmas_de_programacao_3_X.pdfronaldo ramos
 
python_funcional.pdf
python_funcional.pdfpython_funcional.pdf
python_funcional.pdfronaldo ramos
 
48-aula48-modelosTemporais.pdf
48-aula48-modelosTemporais.pdf48-aula48-modelosTemporais.pdf
48-aula48-modelosTemporais.pdfronaldo ramos
 
47-aula47-fuzzy-aplicacao.pdf
47-aula47-fuzzy-aplicacao.pdf47-aula47-fuzzy-aplicacao.pdf
47-aula47-fuzzy-aplicacao.pdfronaldo 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

Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxDianaSheila2
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreElianeElika
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memorialgrecchi
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptxMarlene Cunhada
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 

Último (20)

Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptx
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memoria
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptx
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 

03_lisp.pdf

  • 1. Paradigmas de Programação Ronaldo F. Ramos Instituto Federal do Ceará 11 de novembro de 2023
  • 2. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas PARTE 3 - PARADIGMA FUNCIONAL PROGRAMAÇÃO FUNCIONAL EM LISP AULA 3 2 / 22
  • 3. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Roteiro 1 Elementos Intrínsecos de Programação Funcional 2 Ordenamento 3 Igualdade e Identidade 4 Funções para listas 3 / 22
  • 4. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Funcall Chama uma função passando seus argumentos. 1 (defun soma (x y) (+ x y)) 2 SOMA 3 > (soma 2 3) 4 5 5 > (funcall #’soma 2 3) 6 5 4 / 22
  • 5. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Apply Apply é semelhante a Funcall, exceto que seu argumento final deverá ser uma lista. Os elementos desta lista são tratados como se fossem argumentos adicionais ao Funcall. 1 > (apply #’soma ’(5 6)) 2 11 3 > (apply #’+ 3 4 ’(3 4)) 4 14 5 / 22
  • 6. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Maps - mapcar O primeiro argumento a mapcar deve ser uma função de um argumento. mapcar aplica esta função a cada elemento de uma lista dada e coleta os resultados em uma outra lista. 1 > (defun dobro (x) (* 2 x)) 2 DOBRO 3 > (dobro 2) 4 4 5 > (mapcar #’dobro ’(1 2 3 4)) 6 (2 4 6 8) 7 > (mapcar #’not ’(t nil t nil t nil)) 8 (NIL T NIL T NIL T) 6 / 22
  • 7. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Funções Lambda Funções anônimas temporárias. 1 (setq quadrado (lambda (x) (* x x))) 2 #<FUNCTION :LAMBDA (X) (* X X)> 3 [15]> (funcall quadrado 2) 4 4 5 >#’(lambda (x) (+ x 3)) 6 #<FUNCTION :LAMBDA (X) (+ X 3)> 7 > (funcall * 5) ;observe que neste contexto o * é uma 8 ;variável que representa o último form 9 ;que foi digitado.. 10 8 7 / 22
  • 8. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Lambda com Mapcar A combinação de lambda e mapcar pode substituir muitos laços. Por exemplo, os dois forms seguintes são equivalentes: 1 > (do ((x ’(1 2 3 4 5) (cdr x)) 2 (y nil)) 3 (( null x) (reverse y)) 4 (push (+ (car x) 2) y) 5 ) 6 (3 4 5 6 7) 7 > (mapcar #’(lambda (x) (+ x 2)) ’(1 2 3 4 5)) 8 (3 4 5 6 7) 8 / 22
  • 9. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Ordenamento LISP provê duas primitivas para ordenação: sort e stable-sort. 1 > (sort ’(2 1 5 4 6) #’<) 2 (1 2 4 5 6) 3 > (sort ’(2 1 5 4 6) #’>) 4 (6 5 4 2 1) O primeiro argumento para sort é uma lista, o segundo é a função de comparação. A função de comparação não garante estabilidade. 9 / 22
  • 10. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Ordenamento Estável A função stable-sort é exatamento como sort, só que ela garante que dois elementos equivalentes vão aparecer na lista ordenada exatamente na mesma ordem em que aparecem lista original. 1 >(stable -sort ’(2 1 5 4 6) #’>) 2 (6 5 4 2 1) 3 > (stable -sort ’(2 1 5 4 6) #’<) 4 (1 2 4 5 6) Atenção: O sort pode modificar ou apagar a lista original. Para fazer cópias use copy-list ou copy-seq 10 / 22
  • 11. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Copiando a Lista 1 >(setq nova (copy -list ’(1 2 3 4))) 2 (1 2 3 4) 3 ; outra forma 4 > (setq nova (copy -seq ’(1 2 3 4))) 5 (1 2 3 4) 6 > nova 7 (1 2 3 4) 11 / 22
  • 12. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Igualdade e Identidade Dois símbolos são eq se e somente se eles forem idênticos (identidade). Duas cópias da mesma lista não são eq (são dois objetos diferentes) mas são equal (iguais). 1 > (eq ’a ’a) 2 T 3 > (eq ’a ’b) 4 NIL 5 > (= 3 4) 6 NIL 7 > (eq ’(a b c) ’(a b c)) 8 NIL 9 > (equal ’(a b c) ’(a b c)) 10 T 11 > (eql ’a ’a) 12 T 13 > (eql 3 3) 14 T 12 / 22
  • 13. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Igualdade e Identidade Detalhes: • O predicado eql é equivalente a eq para símbolos e a = para números. É a identidade que serve tanto para números como para símbolos. • O predicado equal é equivalente eql para símbolos e números. Ele é verdadeiro para dois conses, se e somente se, seus cars são equal e seus cdrs são equal. Ele é verdadeiro para duas estruturas se e somente se as estruturas forem do mesmo tipo e seus campos correspondentes forem equal. 13 / 22
  • 14. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Exemplos de Igualdade e Identidade Mais exemplos: 1 >(setq X ’(A B)) 2 (A B) 3 > (setq Y ’(A B)) 4 (A B) 5 > (equal X Y) ;X e Y são iguais 6 T 7 > (eq X Y) ;X e Y não são idênticos 8 NIL 14 / 22
  • 15. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Append A função append adiciona uma lista ou elemento à outra. 1 >(append ’(1 2 3) ’(4 5 6)) 2 (1 2 3 4 5 6) 15 / 22
  • 16. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Reverse Reverte os elementos de uma lista. 1 > (reverse ’(1 2 3)) 2 (3 2 1) 16 / 22
  • 17. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas member Verifica se um elemento é menbro de uma lista. 1 > (member ’a ’(b d a c)) 2 (A C) 3 > (member ’e ’(b d a c)) 4 NIL 17 / 22
  • 18. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas find Encontra um elemento ou uma sublista em uma lista. A sua sintaxe é (find item lista :key funcao :test predicado) • item é o elemento a encontrar • lista é a lista onde vamos procurar o elemento • funcao :key é uma função opcional que aplica uma transformação aos elementos da lista antes de compará-los • :test é um predicado opcional que especifica como comparar os elementos. 18 / 22
  • 19. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Exemplos de find Encontrar o número 5 na lista (1 2 3 4 5 6 7) 1 (find 5 ’(1 2 3 4 5 6 7)) 2 5 Encontrar o número 5 na lista ((1 2) (3 4) (5 6) (7 8)), que é uma lista de listas. 1 > (find 5 ’((1 2) (3 4) (5 6) (7 8)) :key #’car) 2 (5 6) Encontrar múltiplo de 5 na lista 10 20 30 40 50 60 70). 1 >(find 5 ’(10 20 30 40 50 60 70) :test #’= :key #’(lambda (x) (/ x 10))) 2 50 19 / 22
  • 20. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas subsetp Verificação de subconjunto. 1 >(subsetp ’(a b) ’(a d e)) 2 NIL 3 > (subsetp ’(a d) ’(a d e)) 4 T 20 / 22
  • 21. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas union intersection difference União,interseção e diferença de conjuntos. 1 >(union ’(a) ’(b)) 2 (A B) 3 >(intersection ’(a b c) ’(b)) 4 (B) 5 > (set -difference ’(a b) ’(a)) 6 (B) Subsetp, intersection, union, e set-difference todos assumem que cada argumento não contém elementos duplicados. Eles também podem todos tomar um argumento :test. Por default, todos usam eql. 21 / 22
  • 22. Elementos Intrínsecos de Programação Funcional Ordenamento Igualdade e Identidade Funções para listas Exercícios 1. Escreva uma função que leia do usuário uma lista de produtos e seus respectivos preços, colocando-os em uma lista organizada por pares produto-preço. A entrada de dados é finalizada digitando-se a palavra ‘fim ao invés de um nome de produto. Utilize o comando loop para implementar o laço de leitura e defina uma variável global onde a lista ficará armazenada ao fim da leitura. 2. Escreva uma função ou conjunto de funções, que, através de um menu de opções, realizem as seguintes tarefas: a) Pesquisar preço de um produto em lista de preços e produtos. b) Mostrar em ordem alfabética toda a lista de produtos disponíveis com os respectivos preços, formatada na tela. c) Fazer compras: Um ambiente onde o usuário pode entrar com nomes de produtos e quantidades que deseja comprar. 22 / 22