-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexercicios de Lisp.txt
59 lines (52 loc) · 1.17 KB
/
exercicios de Lisp.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
(defun tam+1 (l) ; cria uma nova lista com a quantidade de elementos da lista anterior +1 preenchendo os valores com t
(if(null (car l))
(cons t NIL)
(cons t (tam+1 (cdrl)))
)
)
(DEFUN MUDA (A1 A2 L) ;troca o elemento A1 pelo elemento A2 em uma lista simples
(IF(NULL (CAR L))
NIL
(IF(EQL A1 (CAR L))
(CONS A2 (MUDA A1 A2 (CDR L)))
(CONS (CAR L) (MUDA A1 A2 (CDR L)))
)
)
)
(DEFUN N-ESIMO (N L)
(IF(ZEROP N)
(CAR L)
(N-ESIMO (1- N) (CDR L))
)
)
(DEFUN MUDA-N (N E L)
(IF(ZEROP N)
(CONS E (CDR L))
(CONS (CAR L) (MUDA-N (1- N) E (CDR L)))
)
)
(DEFUN POS (E L) ; RETORNA POSICAO DE UM ELEMENTO
(IF(EQL (CAR L) E)
0
(IF (NULL (CDR L))
NIL ; NAO EXISTE NA LISTA
(1+ (POS E (CDR L)))
)
)
)
(DEFUN MAPEAR ( F L) ; EXECUTA UMA FUNCAO F PARA TODOS OS ELEMENTOS DA LISTA L E RETORNA UMA NOVA LISTA COM ESSES NOVOS VALORES
(IF (NULL (CAR L))
NIL
(CONS (FUNCALL F (CAR L)) (MAPEAR F (CDR L)))
)
)
(MAPEAR (FUNCTION ZEROP) '(0 1 0 2))
(DEFUN ELIMINA (E L) ; RETIRA UM ELEMENTO DA LISTA
(IF(EQL (CAR L) E)
(CDR L)
(IF(NULL (CAR L))
NIL
(CONS (CAR L) (ELIMINA E (CDR L)))
)
)
)