Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Javier Gil
Julio, 2011
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
conceptos fundamentales de Lisp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sintaxis basica
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(+ 2 3)
(* 2 (+ 4 6))
(+ 2/7 7/67)
(/ #c(2 3) 6/4)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; operadores matematicos basicos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(+ 2 3)
(- 8 6)
(* 2/7 6/5)
(/ 4 5)
(exp 9)
(expt 2 4)
(sqrt 11)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; operaciones basicas con listas
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; creacion de una lista con (cons )
(cons 3 nil)
; insercion de un nuevo elemento
(cons 4 (cons 3 nil))
; creacion de una lista con varios elementos con (list )
(list 1 2 3 4)
; iteracion con do
; (do ((<var> <inicial> <actualizacion>)
(<var> <inicial> <actualizacion>)
...
)
(<condicion salida><retorno>)
;
<instrucciones>
; )
(do ((n 1 (+ n 1))) ((> n 10) hecho) (print n))
; iteracion con dotimes, el valor inicial es 0
; (dotimes (<var> <max>)
;
<instrucciones>
; )
(dotimes (n 10) (print n))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; argumentos opcionales llamando a funciones
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; puede pasarse a una funcion un numero variable de argumentos
; &rest indica una variable que recolecta en una lista a partir
; de un punto el resto de argumentos que se pase a la funcion
(defun filosofo (cosa &rest x)(list cosa es x))
(filosofo vida )
; &optional indica que los parametros que vienen a continuacion
; son opcionales, y por defecto estan a nil, salvo que se diga
; lo contrario
(defun una-suma (a b &optional (c 0)) (+ a b c))
; tambien pueden declararse claves, que pueden estar o no
; y que por defecto son nil
(defun otra-suma (a b &key (c 0))(+ a b c))
(otra-suma 2 3)
(otra-suma 2 3 :c 5)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; macros
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; una macro es un programa que crea un programa, que despues
; es ejecutado.
; funcion para hacer una tabla de valores de la funcion x^2
(dotimes (n 11) (print n) (prin1 (* n n))
; macro para hacer una tabla de valores de _cualquier_ funcion
; la precede al programa, y una , antes de un parametro
; indica que ese parametro ha de ser sustituido por el argumento
; de la macro
(defmacro tabla (f desde hasta)
(do ((n ,desde (+ n 1)))((> n ,hasta))
(format t "~&~4D ~16D" n (funcall #,f n))))
(tabla fct)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; matrices
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; creacion de una matriz
(setq a (make-array (3 3)))
Secuencia
Accion
-------------------------------------------------------~&
inserta nueva linea, slo si el cursor
no se encuentra ya en la primera columna
~%
inserta nueva linea
~T
tabulador
~|
nueva pagina
~D
entero base 10
~B
entero binario
~X
entero hexadecimal
~O
entero octal
~bR
entero en base b
~F
punto flotante
~E
notacion cientifica
~G
~F o ~E segun magnitud
~A
formato legible para el usuario
~S
formato legible para (read )
~@R
numeros romanos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; apertura y cierre de archivos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; un archivo se abre con open
(setq corriente-de-salida (open "temporal" :direction :output))
; se escribe con print o format
(print abc corriente-de-salida)