LISP CON EJEMPLOS PRACTICOS
LISP es un lenguaje de programación que se basa en manipulacion de expresiones encerradas entre paréntesis.

Lección 1. Iniciando en Lisp
Lisp permite compilación en "línea" es decir teclear comandos directamente en el prompt o con el uso de archivos.

Para iniciar, usaremos la compilación en línea. Teclee en el prompt lo siguiente:

(setq A 0)
(setq B 1.0)
(setq C '(Hola mundo))
(+ A B)
(* (+ A 1) B)
A

Explicación:
La línea 1 crea una variable llamada A y le asigna un valor de 0 (asigna un entero)
La línea 2 crea una variable llamada B y le asigna un valor de 1.0 (asigna un flotante)
La línea 3 crea una variable llamada C y le asigna la cadena Hola mundo (asigna una cadena)
La línea 4 realiza una operación de suma con las variables A y B
La línea 5 realiza una operaciòn de suma con variables y datos numeros (A+1) * B
La línea 6 permite ver el contenido de la variable A.

Lección 2. Manejo de cadenas, listas y pilas
Teclee las siguientes líneas:

(car '(Este es un buen dia))
(cdr '(Este es un buen dia))
(append '(hola) '(mundo) '(azul))
(list '(1) '(2) '(3))
(setq A '(1))
(push 2 A)
(push 3 A)

Explicación:
La línea 1: (car '(Este es un buen dia)) realiza la función car que obtiene la primer palabra de una cadena. En el ejemplo, el resultado de es "Este".
La línea 2: (cdr '(Este es un buen dia)) realiza la función cdr que elimina el primer elemento de una cadena. En el ejemplo, el resultado es "es un buen día"
La línea 3: (append '(hola) '(mundo) '(azul)) usa la función append que concatena o une cadenas y las regresa como una sola.
La línea 4: (list '(1) '(2) '(3)) forma una lista con los elementos 1 2 3 con el comando lisp.
La línea 5: (setq A '(1)) crea una variable A y le asigna el elemento 1. En las últimas dos líneas le agrega los elementos 2 y 3 con push.
Los elementos serán agregados al inicio de la pila.

Lección 3. Manejo de funciones y archivos
Empezaremos con el uso de funciones. Guarde el siguiente texto en un archivo de texto creado con un editor de texto, por ejemplo con Notepad y a continuación guardelo con el nombre Archivo.lsp

(defun Opera(a b)
(setq suma (+ a b))
(setq resta (- a b))
(print '(La suma es: ))
(print suma)
(print '(La resta es: ))
(print resta)
)

Uso
Para usarla solo se teclea lo siguiente:
(load "Archivo")

y aparecerá:
;loading C:Archivo.lsp
T

luego teclear:
(Opera 10 8)

y aparecerá:
La suma es: 18
La resta es: 2

Explicación:
El compildor de lisp, separa las instrucciones, funciones, ciclos y toda su información, solo mediante paréntesis, es por esto que es muy importante que esten "balanceados" es decir, que por cada paréntesis inicial exista uno final.
La primera línea (defun Opera(a b) tiene la palabra reservada "defun" que sirve para dar de alta una funcion llamada Opera y las letras a y b que siguen entre parentesis, son los "parámetros" o datos necesarios para realizar la función Opera.
La línea 2 (setq suma (+ a b)) contienen la palabra setq, que es la que realiza la asignación, es decir, crea una variable llamada suma y guarda en ella el valor que tiene a su derecha. Como el valor es una suma, primero realiza la Operación a+b y después asigna este valor a suma. Algo muy importante es que todas las operaciones se deben escribir con notación prefija, es decir, primero se escribe el operador y después los operandos. Ejemplo a + b = + a b ; a + b * c = + a (* b c )
La linea 4 (print '(La suma es: )) imprime una cadena en pantalla. Notese que primero se escribe print y a continuación la cadena entre paréntesis y precedida por un apostrofe.
La linea 5 (print suma) imprime en pantalla el valor de la variable suma.
La última línea es un paréntesis que finalizará la función. Asi entonces, la estructura de una funcion es en terminos generales.

(defun Nombre_funcion ( parametros )
(expresiones)
.
.
(expresiones)
)


Lección 4. Manejo de flujo
Lisp puede manejar condiciones con las sentencias if y loop-when de la siguiente forma.

En un archivo teclee lo siguiente y guardelo como Condiciones.lsp

(defun IsCero(n)
( if (= n 0) (return 1) (return 0))
)

(defun factorial (n)
(setq fac 1)
(loop
(setq fac (* fac n) ))
(setq n (- n 1))
when (= n 1)
)
(return fac)
)

Explicación:
La primera función IsCero recibe un valor y revisa si es cero. Después del if sigue la condición en donde se pregunta si n=0. Si es asi, regresa un 1 y si no regresa un cero. En general el formato es el siguiente:

(if (condicion) ; pregunta si se cumple una condición
(expresion ) ; se realiza si la condicion es cierta
(expresion) ; el segundo bloque se realiza si la condición es falsa.
) ; fin del if

La segunda funcion factorial utiliza un ciclo con loop y realiza todo lo encuentre hasta hallar la palabra when, lugar donde pregunta si la condición se ha cumplido y de ser asi, el ciclo se detiene. En general el formato es el siguiente:
(loop ; inicio de ciclo
(expresion) ; expresion o expresiones a repetir
(when (condicion) ; revisión de condición completada
) ; fin del loop

Hosted by www.Geocities.ws

1