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

Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig LatinElen Arantza
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig LatinElen Arantza
 
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/10Marco Mendes
 
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/10Marco Mendes
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosRafael Martins
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosRafael Martins
 
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 webAlvaro Oliveira
 
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 webAlvaro Oliveira
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
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êsHelio Colombe
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
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êsHelio Colombe
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosDanilo Braga
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosDanilo Braga
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxeFlapenta
 
Py sintaxe
Py sintaxePy sintaxe
Py sintaxeFlapenta
 

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

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

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - DissertaçãoMaiteFerreira4
 
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfGEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfElianeElika
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
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
 
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
 
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
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 
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
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
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
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfFernandaMota99
 
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
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxDianaSheila2
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFtimaMoreira35
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptxMarlene Cunhada
 

Último (20)

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - Dissertação
 
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfGEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
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
 
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
 
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
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 
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...
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
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
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.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
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptx
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptx
 

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