LISP cheat sheet (in spanish)
Primitivas fundamentales
- setf - asigna valores a una lista
- atom - te dice si algo es átomo o no
- print - sacar algo por pantalla
(print "[-] Error crítico: Explosión inminente! D:")
- format - sacar texto y datos por pantalla (como printf en C)
(format t "~% Variable cadena tiene valor ~s ~%" cadena)
Operaciones con listas
- first - devuelve un átomo que tiene como elemento el primer elemento de la lista
- rest - devuelve una lista con todos los elementos menos el primero
-
last - devuelve una lista con el ultimo elemento
- append - combina los elementos de todas las listas
- remove - elimina un elemento de una lista
- list - hace una lista con lo que le pases
-
cons - hace una lista con el primer elemento, y añade esa lista creada a otra lista seguida del resto de los elementos (1 2) -> ((1) 2)
- length - devuelve el número de elementos de una lista
-
reverse - invierte el orden de los elementos de una lista
- assoc - como un hashmap
(setf supra '((motor 2JZ-GTE) (turbo GT-40)))
(assoc 'motor supra)
Procedimientos
- defun - definir funciones
(defun miFuncion
(parametro1 parametro2)
(cons
(first parametro1) (last parametro2)
)
)
Condicionales
- member - verifica si el primer argumento forma parte del segundo - devuelve una lista a partir de ese elemento (incluído) en la lista en la que buscar
- atom - es un átomo?
- numberp - es un número?
- symbolp - es un símbolo?
- listp - es una lista?
- null - el argumento es una lista vacía? - acepta lo que sea
-
endp - el argumentos es una lista vacía? - solamente acepta listas
Conlusión () = ‘() = NIL = ‘NIL -> todos son átomos
- zerop - es cero?
- plusp - es positivo?
- minusp - es negativo?
- evenp - es par?
- oddp - es impar?
- > - orden descendente en todos los parámetros?
-
< - orden ascendente en todos los parámetros?
- = - los argumentos son el mismo número?
- equalp - los argumentos son iguales?
-
eq - “los argumentos ocupan la misma cantidad de memoria?”
- and - como en C
- or - como en C
-
not - como en C
- if - como en C
(if comparacion
(hazEsto siCierto)
(hazEsto siFalso)
)
- when - solo parte de lo cierto
-
unless - solo parte de lo falso
- cond - como el switch en C, Java y el case en Bash
(cond
(comparacion1
hazEsto1
)
(comparacion2
hazEsto2
)
...
(comparacionN
hazEstoN
)
(T hazEstoPorDefecto)
)
Recursividad
(defun factorial (n)
(if (= n 1)
(* n (factorial (- n 1)))
)
)
(defun fibonacci (n)
(cond ((= n 0) 0)
((= n 1) 1)
(t (+ (fibonacci (- n 1) (fibonacci (- n 2)))
)
)
Iteratividad (necesario dar valor a resultado)
(dolist (elemento lista resultado)
(+ resultado 1)
)
Prog: Controlar flujo de ejecución + variables locales
(prog (var1 var2 ...)
(setf valor (+ 1 1))
(return valor)
)
Cómo hacer la práctica
(defun es-variable (var)
(cond ((atom var) T)
((eq (first var) '?) T)
(T NIL)
)
)
En CLISP todas las variables son globales excepto los parámetros que reciben las funciones