Escolar Documentos
Profissional Documentos
Cultura Documentos
Backquote
Definiendo macros
Probando macros
II
Metodologas de Programacion
Macros en Lisp
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
funcion
Lisp un programa que genera
programas.
produce un resultado,
Diferencia importante: Una funcion
que al ser
pero una macro produce una expresion
evaluada produce un resultado.
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplo: nil!
1
2
3
4
5
6
7
Como
evalua
Lisp la llamada en la lnea 4?
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
de una macro
Evaluacion
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
solo
en algunas partes
Deteniendo la evaluacion
1
2
3
4
5
6
7
8
> (list a b c)
> (a b c)
> (setf a 1 b 2 c 3)
> (a (,b c))
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
Ventajas de backquote
1
2
3
4
faciles
a que la expresion
invertido es similar a su
Vean las definiciones de nil!
macro-expansion.
(defmacro nil!
(list setq
(defmacro nil!
(setq ,var
(var)
var nil))
(var)
nil))
Introduccion
Backquote
Definiendo macros
Probando macros
complejo: nif
Un ejemplo mas
I
1
2
3
4
un if numerico:
CL-USER 8 > (mapcar #(lambda(x)
(nif x p c n))
(0 2.5 -8))
(C P N)
Ejemplos
Introduccion
Backquote
Definiendo macros
1
2
3
4
5
Probando macros
Ejemplos
Introduccion
Backquote
Definiendo macros
1
2
3
4
5
6
Probando macros
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
Coma-arroba
1
2
3
4
5
6
que en lugar de
Funciona como la coma normal, solo
que antecede, inserta su
insertar el valor de la expresion
externos:
valor removiendo los parentesis
mas
CL-USER 10 > (setq b (1 2 3))
(1 2 3)
CL-USER 11 > (a ,b c)
(A (1 2 3) C)
CL-USER 12 > (a ,@b c)
(A 1 2 3 C)
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
1
2
3
el parametro
&body toma un numero
arbitrario de argumentos
progn.
y el operador coma-arroba los inserta en un solo
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
1
2
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
Parametros
de la macro
Introduccion
Backquote
Definiendo macros
Probando macros
Cuerpo de la macro
I
1
2
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
1
2
3
4
I
1
2
3
4
5
6
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
Macro expansiones
Introduccion
Backquote
Definiendo macros
Probando macros
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
1
2
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
Ejemplos
Evaluando la expansion
1
2
3
4
Introduccion
Backquote
Definiendo macros
Probando macros
for, in y random-choice
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Ejemplos
Introduccion
Backquote
Definiendo macros
Corridas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Probando macros
Ejemplos
Introduccion
Backquote
Definiendo macros
macro expansiones
1
2
3
4
5
6
7
8
9
10
11
12
13
Probando macros
Ejemplos
Introduccion
Backquote
Definiendo macros
Probando macros
Bibliografa
P. Graham.
On Lisp: Advanced Techniques for Common Lisp.
Prentice Hall International, 1993.
Ejemplos