Sie sind auf Seite 1von 8

Inteligencia Artificial 2010 I

UNMSM - FISI

MANUAL DEL USUARIO DE LISP WORKS PERSONAL


Lisp es un lenguaje diseado para la manipulacion de formulas simbolicas. Creado para la inteligencia artificial. La primcipal caracteristica de Lisp es su habilidad de expresar algoritmos recursivos que manipulen estruturas de datos dinamicos. En Lisp existen dos tipos basicos de palabras, los atomos y las listas. Atomos: 1. Pueden ser palabras 2. No comienzan con digitos 3. No tiene espacio entre letras 4. No incluyen caracteres Listas: 1. Secuencia de atomos separados 2. Encerrados por parentesis 3. Pueden contener una sub-lista

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

Inteligencia Artificial 2010 I VARIABLES:

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

Inteligencia Artificial 2010 I

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

Inteligencia Artificial 2010 I

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))

Let Declara variables locales. Por ejemplo:

CL-USER 11>(let edad 20) 20

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

Inteligencia Artificial 2010 I

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

Das könnte Ihnen auch gefallen