Manual Lisp PDF
Manual Lisp PDF
Manual Lisp PDF
UNMSM - FISI
A continuacion mostraremos alguna de las operaciones que pueden realizar programando el Lisp. OPERACIONES ARITMETICAS: Suma: ( + n1 n2 n3 ... nN) Se ingresa dentro de los parentesis el operador + seguido de los sumandos. Por ejemplo: CL-USER 1 > ( + 9 3 7 ) 19 Resta: ( - n1 n2 n3 nN ) Se ingresa dentro de los parentesis el operador - seguido de los numeros a restarse. Por ejemplo: CL-USER 2 > ( - 50 15 ) 35 CL-USER 3 > (- 100 25 15) 60 Multiplicacin: ( * n1 n2 n3 nN ) Se ingresa dentro de los parentesis el operador * seguido de los multiplicando. Por ejemplo: CL-USER 4 > ( * 5 6) 30 Division: ( / n1 n2 n3 n4 ) Se ingresa dentro de los parentesis el operador / seguido del dividendo y divisor. Por ejemplo: CL-USER 5 > ( / 100 5 ) 20 OPERACIONES NUMERICAS: ( sqrt n ) Permite obtener la raiz cuadrada de n. Por ejemplo: CL-USER 6 > (SQRT 4 ) 2.0 CL-USER 7 > ( sqrt 99 ) 9.949874
UNMSM - FISI
(setq variable num) Permite darle un valor (num) a una variable que se ingrese. Por ejemplo: CL-USER 6 > (setq edad 21 ) 21 CL-USER 7 > (+ edad 3) 24 ( setf variable valor) Asiga valores a una variable con un valor ya definido. Por ejemplo: CL-USER 1 > (setq Lista '((u n o) 3 p (t h e))) ((U N O) 3 P (T H E)) CL-USER 2 > (setf (cadr lista) 'i) I CL-USER 3 > (setf (caar lista) 12) 12 CL-USER 4 > lista ((12 N O) I P (T H E)) VALORES LOGICOS: T = simboliza verdad NIL = simboliza falsedad Por ejemplo: CL-USER 8 > (= 10 (+ 3 7)) T CL-USER 9 > ( = 3 (- 9 2)) NIL ( eq Lista1 Lista2) Compara 2 listas,devuelve T si son iguales, en caso contrario Nil. Por ejemplo: CL-USER 5 : 2 > ( eq 'casa 'casa ) T CL-USER 7 : 2 > (eq '( a b ) '( a c ) ) NIL (equal Lista1 Lista2 ) Compara las listas ingresadas, devuelve T si son equivalentes, Nil en caso contrario. Por ejemplo: CL-USER 6 : 2 > (equal 'casa 'casa ) T CL-USER 10 : 3 > ( equal 'ca 'a ) NIL ( listp Lista ) Verifica si lo ingresado es una lista o atomo, si es lista regresa un T, sino Nil. Por ejemplo: CL-USER 3 > (listp 'ca) NIL CL-USER 4 > (listp '(ca ba ec)) T
UNMSM - FISI
( atom Atomo ) Verifica si lo ingresado es un atomo, si es un atomo devuelve T, caso contrario, Nil. Por ejemplo: CL-USER 5 > (atom 'ca) T CL-USER 6 > (atom '(ca ba ec)) NIL FUNCIONES SOBRE LISTAS: (cons Atomo Lista) Aade al principio de una lista dada un elemento Por ejemplo: CL-USER 7 > (cons 20 (cons 50 nil)) (20 50) CL-USER 8 > (cons 'a (cons 3 '(d e f))) (A 3 D E F) (list Atomo1 Atomo2 AtomoN) Construye una lista a partir de sus elementos Por ejemplo: CL-USER 21 > (list 3 5 numero 'p '(q u e) 'r) (3 5 3 P (Q U E) R) ( car Lista ) Devuelve el primer valor de la lista. Tambien se puede usar ( first Lista ). Por ejemplo: CL-USER 11 > ( car '( 1 2 3 ) ) 1 CL-USER 1 > ( first '( 1 2 3 ) ) 1 ( cdr Lista ) Devuelve toda la lista menos el primero. Tambien se puede usar ( rest Lista ). Por ejemplo: CL-USER 12 > ( cdr '( 1 2 3 4 5 6 ) ) (2 3 4 5 6) CL-USER 2 > ( rest '( 1 2 3 ) ) (2 3) Combinaciones del car y cdr: Por ejemplo: CL-USER 18 : 7 > (caar '((u n o) 3 p (t h e))) U CL-USER 19 : 7 > (cadr '((u n o) 3 p (t h e))) 3 CL-USER 20 : 7 > (cdar '((u n o) 3 p (t h e))) (N O) CL-USER 21 : 7 > (cddr '((u n o) 3 p (t h e))) (P (T H E)) ( last Lista ) devuelve el ultimo de la lista. Por ejemplo: CL-USER 12 > ( last '( 1 2 3 4 5 6 ) ) (6)
Inteligencia Artificial 2010 I ( length Lista ) devuelve el tamao de la lista. Por ejemplo: CL-USER 13 > (length '(a b ( b c )) ) 3
UNMSM - FISI
( append Lista1 Lista2 ListaN) devuelve una concatenacion entre las listas. Por ejemplo: CL-USER 14 > (append '( 1 2 ) '(3 4) ) (1 2 3 4) ( reverse Lista ) devuelve la lista en orden inverso. Por ejemplo: CL-USER 15 > ( reverse '( a b (c d ) e )) (E (C D) B A) FUNCIONES LGICAS: (and valores) Evala sus argumentos hasta encontrar uno que sea NIL o regresa el valor del ltimo. Por ejemplo: CL-USER 15 > (and a v e) E CL-USER 16 > (and nil 1 2 3) NIL CL-USER 17> (and (nil 1 2) 3) 3 (or valores) Evala sus argumentos hasta encontrar uno que no sea NIL o regresa NIL. Por ejemplo: CL-USER 20 > (or 1 nil 2 3) 1 CL-USER 11> (or nil nil nil) NIL (not valor) Devuelve t si valor es nil y nil en los dems casos. Por ejemplo: CL-USER 11> (not nil) T CL-USER 12> (not (a v c)) NIL FUNCIONES PARA STRING: Format Para escribir en la pantalla, su primer argumento debe de ser T.. (format <destination> <control-string> <optionalarguments>) Por ejemplo: CL-USER 2 > (format t "Hola mundo...") Hola mundo...
Todas las instrucciones de impresin especiales empiezan con ~. ~% nueva linea ~% ~% se salta un renglon 4
Inteligencia Artificial 2010 I ~A imprime un objeto con caracteres ASCII ~D en notacin decimal ~F en notacin real Por ejemplo: CL-USER 3 > (format t "salta ~%~%a otra ~%linea") salta a otra linea NIL CL-USER 4 > (format t "~20S ~S" 'juan 'perez) JUAN PEREZ NIL FUNCIONES
UNMSM - FISI
Defun Define una funcin con un nombre y que tiene como argumentos una lista de variables (arg1 arg2 ... argn). El cuerpo es una lista que define qu hace la funcin. (defun nombre-funcions (arg1 arg2 ... argn) comentarios (cuerpo ) ) Por ejemplo: CL-USER 36 > (defun CUBO (X) (* X X X)) CUBO CL-USER 37 > (cubo 9) 729
If Usado para evaluar una condicion. En caso de que se cumpla (valor verdadero) se ejecuta la consecuencia, caso contrario la alternativa (IF <condicin> <consecuencia> <alternativa>) Por ejemplo: CL-USER 20> (defun mayor() (print "ingrese el primer numero") (setq x (read)) (print "ingrese el segundo numero") (setq y (read)) (if(> x y) (setq v x) (setq v y)) (print "el mayor valor es: ") (print v)) MAYOR CL-USER 11 : 1 > (MAYOR) "ingrese el primer numero" 12 "ingrese el segundo numero" 13 "el mayor valor es: " 13 5
UNMSM - FISI
Cond Ejecuta un flujo de control dependiendo de la condicin si es cierta o no. Es habitual utilizar T como ltima (por defecto) expresin de prueba. (cond ((condicion1) bloque1) ((condicio2) bloque2) ... ((condicionN) bloqueN) ) Por ejemplo: CL-USER 6 : 1 > (defun notas (X) (COND ((< X 11) 'C) ((< X 15) 'B) ((< X 18) 'A) (t 'A+))) NOTAS CL-USER 7 : 1 > (NOTAS 17) A (let (indice-var inicial))
Dotimes Evala la forma del cuerpo N veces cambiando su ndice de 0 a N-1 y regresando resultado (nill si no se especifica). (dotimes (indice-var N [resultado]) cuerpo) Por ejemplo: CL-USER 11 : 1 > (defun FACT (X) (let ((f 1)) (dotimes (i X f) (setq f (* f (+ i 1)))))) FACT CL-USER 13 : 1 > (fact 5) 120
Dolist Es parecido al dotimes pero cambia su variable sobre los elementos de una lista. (dolist (indice-var Lista [resultado]) cuerpo) Por ejemplo: CL-USER 12> (defun MEDIA (X) (let ((sum 0)) (dolist (i X sum) (setq sum (+ sum i))) (setq cant (length X)) (setq media (/ sum cant)) (print "la media es ") (print media))) MEDIA CL-USER13> (MEDIA '(1 2 3)) la media es 2 6
UNMSM - FISI
do Es el iteractivo ms poderoso de LISP. Permite asignar varias variables (como LET), hacer pasos de iteracin como uno quiera y especificar la condicin de terminacin Por ejemplo: CL-USER 7 > (defun fact (n) (do ((i n (- i 1)) (res 1 (* res i))) ((zerop i) res))) FACT CL-USER 8 > (fact 5) 120
mapcar Opera sobre los elementos sucesivos de las listas hasta terminar con la lista ms corta. De cada lista se escoje un tomo en respectivo orden y ejecutan la funcin. (mapcar funcion lista1 lista2 lista3 listaN) Por ejemplo: CL-USER 36 > (mapcar 'cons '(a b c) '(1 2)) ((A . 1) (B . 2)) CL-USER 42 > (mapcar '+ '(1 2 3) '(4 5 6) '(7 8 9)) (12 15 18)
remove-if Elimina los elementos que cumplan con la funcin (remove-if funcion lista) Por ejemplo: CL-USER 48 > (remove-if 'atom '(a (c v) s)) ((C V))
remove-if-not Elimina los elementos que no cumplan con la funcin. (remove-if-not funcion lista) Por ejemplo: CL-USER 53 > (remove-if-not 'null '(1 2 3)) NIL
every Revisa si todos los elementos de la lista cumple con la funcin. Es t cuando si se cumple y NIL caso contrario. (every funcion lista) Por ejemplo: CL-USER 57 > (every '> '(10 20 3) '(1 5 10)) NIL
Inteligencia Artificial 2010 I RECURSIVIDAD: Por ejemplo: CL-USER 1 > (defun fibo (n) (cond ((zerop n) 1) ((= n 1) 1) (t (+ (fibo (- n 1)) (fibo (- n 2)))))) FIBO CL-USER 2 > (fibo 5) 8
UNMSM - FISI
DEBUGGING (trace <func-name1> <funcnamen>) Ayuda a la depuracin de las funciones que uno define, permitiendo el seguimiento de su ejecucin paso a paso. El primer trace que se tipee activa el rastreo, basta dar otro trace para desactivar su actividad (untrace). Por ejemplo: CL-USER 5 > (defun FACT (X) (let ((f 1)) (dotimes (i X f) (setq f (* f (+ i 1)))))) FACT CL-USER 6 > (trace FACT) (FACT) CL-USER 7 > FACT 5 0 FACT > ... >> X : 5 0 FACT < ... << VALUE-0 : 120 120 CL-USER 8> (untrace FACT) (FACT) CL-USER 9 > FACT 5 120