8
Inteligencia Artificial 2010 I UNMSM - FISI 1 MANUAL DEL USUARIO DE LISP WORKS PERSONAL Lisp es un lenguaje diseñado 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. 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 Multiplicación: ( * 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 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

manual_lisp.pdf

Embed Size (px)

DESCRIPTION

Uploaded from Google Docs

Citation preview

Page 1: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

1

MANUAL DEL USUARIO DE LISP WORKS PERSONAL

Lisp es un lenguaje diseñado 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.

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

Multiplicación: ( * 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

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

Page 2: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

2

VARIABLES:

(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

Page 3: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

3

( 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) Añade 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)

Page 4: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

4

( length Lista ) devuelve el tamaño de la lista.

Por ejemplo: CL-USER 13 > (length '(a b ( b c )) )

3

( 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 LÓGICAS:

(and valores) Evalúa 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) Evalúa 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 demás 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 impresión especiales empiezan con ~.

~% nueva linea ~% ~% se salta un renglon

Page 5: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

5

~A imprime un objeto con caracteres ASCII

~D en notación decimal ~F en notación 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

Defun Define una función 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 función.

(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 <condición> <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

Page 6: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

6

Cond Ejecuta un flujo de control dependiendo de la condición si es cierta o no. Es habitual

utilizar T como última (por defecto) expresión 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 Declara variables locales. (let (indice-var inicial))

Por ejemplo: CL-USER 11>(let edad 20)

20

Dotimes Evalúa 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

Page 7: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

7

do Es el iteractivo más poderoso de LISP. Permite asignar varias variables (como LET),

hacer pasos de iteración como uno quiera y especificar la condición de terminación

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 más

corta. De cada lista se escoje un átomo en respectivo orden y ejecutan la función.

(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 función

(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 función.

(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 función. 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

Page 8: manual_lisp.pdf

Inteligencia Artificial 2010 – I UNMSM - FISI

8

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

DEBUGGING

(trace <func-name1> … <funcnamen>) Ayuda a la depuración de las funciones que uno define, permitiendo el seguimiento de su ejecución 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