palabras reservadas lisp

13

Upload: frankz-nrdz

Post on 15-Nov-2015

76 views

Category:

Documents


2 download

DESCRIPTION

Palabras Reservadas Lisp

TRANSCRIPT

INSTITUTO TECNOLOGICO DE SAN LUIS POTOSI

Palabras reservadas Lisp

ALUMNAOrtiz Lpez Alma Delia

PROFESOR: Gloria del Carmen Rendon SustaitProgramacion Logica Y Funcional

SOLEDAD DE GRACIANO SANCHEZ, S.L.P., A 09 DE 02 DEL 2015

Palabras reservadas de Lisp

Evaluadores:

EVAL (evaluate)Sintaxis: (eval x)Simplemente evala x y lo ejecuta si es vlido, de lo contrario dar error.Ejemplos: (eval 1) - es aceptado pero: (eval (1 3 4)) - busca evaluar el primer elemento de la lista y genera elerror '1 IS NOT A FUNCTION' en cambio: (eval (car (1 3)) - ejecutar la funcin car si existiese y evala su sintaxis.

QUOTESintaxis: (quote x)Forma especial que permite ingresar una expresin x sin que Lisp la evale.Quote solo admite un argumento que puede ser un tomo, un nmero o una lista.Ejemplo: (eval (quote (1 3 4))) - evala y devuelve como vlido (1 3 4)Nota:Otras versiones de Lisp aceptan la forma abreviada 'x, no admitida por Spectrum Lisp.

SETSintaxis: (set v x)Donde v = un smbolo y x = el valor a poner. Set evala siempre v.Es equivalente a LET v=x del Basic.Ejemplo: (set var 1) - dar error 'var IS AN UNBOUND VARIABLE' pero: (set (quote var) 1) - ser admitido y har var = 1.

SETQSintaxis: (setq v x)Equivale a (set (quote v) x)Ejemplos: (setq xs (quote alfa)) - crea la variable xs con el valor 'alfa' (set xs 65) - ya que xs contiene a alfa, set crear la variable alfa = 65. (setq xs 65) - en cambio reescribir xs y lo convertir en numrico.

APPLYSintaxis: (apply f la)Permite aplicar una funcin f a un argumento la.Ejemplo: (apply plus 2 3) - da el error de argumentos incorrectos. (apply (quote plus)(pend 2 3)) - ejecuta la funcin y devuelve 5.

FUNCTIONSintaxis: (function s)Donde s = una funcin definida por el usuario.Devuelve una lista conteniendo todos los datos que conforman la funcin creada por uno.Ejemplo: (function fact) - la funcin debe existir, de lo contrario devolver error.

Manipulacin de estructuras de listas:

CARSintaxis: (car l)Devuelve el primer elemento de la lista l. Da error si l no es una lista.Car es por "Contents of the Address part of Register number".Equivale a First del lenguaje LOGO.Ejemplos: (car (1 2 3)) - devuelve error pero: (car (quote (1 2 3))) y (car (pend 1 2 3)) s lo son. Dando como resultado 1.

CDRSintaxis: (cdr l)Decrementa y genera una lista conteniendo todos los elementos de 'l' menos el primero.Cdr es por "Contents of the Decrement part of Register number".Equivale a BF (butfirst) del LOGO.Ejemplo: (cdr (quote (1 2 3 4))) - devuelve (2 3 4) como resultado.

CADRSintaxis: (cadr x)Equivale a hacer (car (cdr x))Ejemplo: (cadr (pend 1 2 3 4 5)) - dar 2 como resultado.

CDDRSintaxis: (cddr x)Equivale a hacer (cdr (cdr x))Ejemplo: (cddr (pend 1 2 3 4 5)) - dar (3 4 5) como resultado.

CONS (construct)Sintaxis: (cons n l)Genera una lista aadiendo n al comienzo de la lista l dada.Ejemplos: (cons 1 2) - es aceptado y da 1.2 en respuesta, pero: (cons 1 2 3 4) devueve error pues admite slo dos argumentos. En cambio: (cons 1 (cons 2 (cons 3 (cons 4 nil)))) - devuelve (1 2 3 4)

LISTSintaxis: (list l)Genera una lista uniendo las listas que se le pasen como argumento l.Ejemplo: (list (quote (1 3))(quote (4 5 6))(quote alfa)) genera la lista: ((1 3) (4 5 6) alfa)

RPLACASintaxis: (rplaca x y)Devuelve x pero reemplazando su primer elemento por y. Como resultado x es modificado directamente en la memoria.Ejemplo: sean las listas a = (1 2 3 4) y b = (6 7 8 9) (rplaca a b) - hace a = ((6 7 8 9) 2 3 4) es equivalente a hacer: (setq a (cons b (cdr a)))

RPLACDSintaxis: (rplacd x y)Similar a rplaca. Modifica x reemplazando el decremento de x por y.Ejemplo: (rplacd b a) - hace b = (6 1 2 3 4) Esto equivale a hacer: (setq b (cons (car b) a))

REVERSESintaxis: (reverse ls)Pone en orden inverso todos los elementos componentes de una lista ls.Ejemplo: (reverse (pend 1 3 5 7)) - devuelve (7 5 3 1)

Funciones aritmticas:

PLUSSintaxis: (plus x y)Suma dos valores. Un tercer valor provoca mensaje de error.(+ x1 ... xn) es admitido por otros Lisp, no por Spec-lisp.

DIFF (difference)Sintaxis: (diff x y)resta dos valores dando su diferencia.(- x1 ... xn) es admitido por otros Lisp, no por Spec-lisp.

TIMESSintaxis: (times x y)Permite la multiplicacin de dos valores.(* x1 ... xn) es admitido por otros Lisp, no por Spec-lisp.

DIVSintaxis: (div x y)Hace la divisin entera de dos valores.(/ x1 ... xn) es admitido por otros Lisp, no por Spec-lisp.

REM (remainder)Sintaxis: (rem x y)Equivale al operador MOD de otros lenguajes y da el resto de la divisin entera.

ADD1Sintaxis: (add1 x)Aade o suma un 1 al valor x.Equivale a (1+ x) de otros Lisp.

SUB1Sintaxis: (sub1 x)Substrae o resta 1 al valor xEquivale a (1- x) de otros Lisp.

Predicados:

ATOMSintaxis: (atom x)Comprueba si el argumento x es o no un tomo.

ZEROPSintaxis: (zerop x)Verifica si x es cero.

NUMBERPSintaxis: (numberp x)Comprueba si el argumento x es o no un nmero.

MINUSPSintaxis: (minusp x)Da T si x es un nmero negativo.

GREATERPSintaxis: (greaterp x y)Devuelve T si x es mayor que y. En caso contrario da Nil.Equivale a (> x y) de otros Lisp.

LESSPSintaxis: (lessp x y)Devuelve T si x es menor que y. Nil si no.Equivale a (< x y) de otros Lisp.

NULLSintaxis: (null x)Da T si x es una lista vaca (). Nil para cualquier otro caso.

EQSintaxis: (eq x y)Como equal. Da T, pero slo si 'x' e 'y' son tomos literales. Dar Nil si son nmeros o datos no atmicos.Ejemplos: (eq 1 1) - devuelve nil. (eq a b) - da error si a y b no son tomos previamente definidas. (eq (quote alfa)(quote alfa)) - devuelve T.

EQUALSintaxis: (equal x y)Devuelve T si x es igual a y, independientemente de si es tomo o nmero.Equivale a (= x y) de otros Lisp. Algunas versiones sin embargo limitan '=' a valores numricos, dando error con cualquier otro tipo de dato.

MEMBERSintaxis: (member x ls)Verifica si el tomo x pertenece o no a la lista ls. Da T en caso de que s sea miembro y Nil si no lo es.

Operadores lgicos:

NOTSintaxis: (not x)Niega el argumento x.

ANDSintaxis: (and x y)Da T si ambos argumentos son verdaderos, Nil en caso contrario.

ORSintaxis: (or x y)Da T si al menos uno de los argumentos es verdadero.

Control:

COND (condition)Sintaxis: (cond (x1 y1)(x2 y2)...(xx yy))Donde x = la condicin a evaluar, y = la accin a tomar o resultado a dar.Los argumentos de cond son llamados clusulas y consisten de listas de dos elementos.Ejemplo: (cond (nil 1)(t 2)(t 3)) - dar 2 como resultado. (cond ((read)(print 1))((read)(print 2))) - imprimir 1 o 2, incluso ambos, dependiendo de lo que el usuario ingrese, si es () para ambos no dar nada.

PROGN (progresion)Sintaxis: (progn [n])Acepta n argumentos y devuelve el valor de la ltima evaluacin tras evaluarlos todos. Da Nil si no tiene ningn argumento. El primer argumento debe ser un smbolo.Ejemplo: (progn (x)(setq x 10)(add1 4)) - da 5, el valor de la ltima expresin. (progn nil 1 (print (quote No)) (print (quote locales)) (setq x (add1 4)) ) - ejecutar los print y devolver 5 pero ignorar 'setq x' y no le dar valor.

WHILESintaxis: (while c (a1...ax))Donde c = la condicin a evaluar, a = la accin a tomar.Lleva a cabo x acciones mientras se cumpla la condicin dada.Ejemplo: (while (read) (print (quote ok?))) - termina al tipear ()

DE (define)Sintaxis: (de nf (p1...px)(a1)(a2)...(ax))Donde:nf =nombre de funcin o procedimiento a definirp = parmetro(s)a = accin a llevar a caboPermite la definicin de nuevos procedimientos o funciones que se aadirn a la librera de primitivas originales del Lisp y sern tratados e invocados del mismo modo.Equivale a (defun ...) de otros Lisp.Ejemplo: una funcin factorial con recursin. (de factorial (n) (cond ((equal n 0) 1) (t (times n (factorial (diff n 1) ))) ))

Definidores de propiedades:

Lisp ofrece la posibilidad de crear listas asociativas, las cuales consisten en listas de listas, siendo una la propiedad y la otra el dato asociado a esa propiedad.

CSETSintaxis: (cset v x)Como set, pero para valores constantes y en algunas versiones de lisp se usa para aadir un valor x a una lista de propiedades v. Cset evala siempre sus argumentos.

CSETQSintaxis: (csetq v x)Equivale a (cset (quote v) x).Una constante creada por cset/csetq no puede ser modificada por set o setq, solo por otra orden cset/csetq. Una variable set puede en cambio ser modificada por cset.Ejemplo: (csetq carro (quote b)) - inicializa la lista de propiedades con un dato inicial cualquiera, en este caso: b.

PUTPROPSintaxis: (putprop n w p)Donde n = nombre del smbolo o lista de propiedades w = el elemento a aadir p = el nombre de la propiedad a crearAade un elemento w a la lista de propiedades n, y si ya existiese una, la reemplaza.Ejemplo: (putprop carro (quote verde)(quote color)) (putprop carro (quote seat)(quote marca)) (putprop carro 127 (quote tipo))Esto le da a 'carro' las propiedades: (color verde) (marca seat) y (tipo 127).En otros lisp en cambio la sintaxis es (putprop 'carro 'color 'verde).Nota: otras versiones de lisp permiten ingresar los datos del siguiente modo: (setq carro '((color verde)(marca seat)(tipo 127)))

GETSintaxis: (get n p)Busca y muestra la propiedad 'p' en la lista de propiedades 'n'. Da nil si no hubiera ninguna, o si se tipea una propiedad inexistente.Ejemplos: (get carro (quote color)) - devuelve 'verde', pero: (get carro (quote llanta)) - dar nil si no se ha aadido antes con putprop.Nota: algunos Lisp carecen de la primitiva Putprop pero tienen en cambio: (setf (get 'x 'w) y)

REMPROPSintaxis: (remprop n p)Remueve una propiedad p de una lista de propiedades n.Ejemplo: (remprop carro (quote tipo)) - da t si la propiedad existe, nil si no.

Entrada/salida:

READSintaxis: (read)Lisp espera a que se ingrese un dato por teclado seguido de ENTER.

PRINTSintaxis: (print x)Evala el argumento 'x' y lo imprime en una lnea aparte.Otras versiones admiten terpri, prin1 y princ, las cuales son inexistentes enSpec-lisp.

PRTSintaxis: (prt)Hace que todo cuanto se escriba, aparezca por la impresora en vez de por la pantalla, hasta que uno tipee "(exit)".

SAVESintaxis: (save n)Salva en casete la informacin bajo el nombre n.

LOADSintaxis: (load [n])Carga en memoria los programas salvados en el casete.Si no se da un nombre, carga el primer archivo que encuentre.

VERIFYSintaxis: (verify [n])Verifica que los datos se salvaron correctamente comparndolos con lo existente en la memoria RAM.

Otros comandos y funciones

TRACESintaxis: (trace [x])Es una utilidad 'debugger'. 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.

NILLSintaxis: (nill)Lisp no admite nil como orden directa o funcin, pero s nill.

GC (Garbage collector)Sintaxis: (gc)Libera el espacio de trabajo para las variables, procedimientos y ejecucin de programas. Equivale a Recycle de LOGO.

OBLISTSintaxis: (oblist)Muestra una lista de todas las palabras reservadas del LISP, adems de su direccin en memoria. Tambin muestra las variables y funciones que uno crea.

EXITSintaxis: (exit)Interrumpe cualquier evaluacin en curso.

RNDSintaxis: (rnd)Da un valor aleatorio de tipo entero.

PCHSintaxis: (pch x)Imprime el cdigo ascii correspondiente a x cuando es usado directamente. Devuelve x.Equivale a la funcin (tyo x) de otros lisp.

STACKSintaxis: (stack x)Donde x = una posicin de memoria.Muestra el mensaje que aparece cuando se carga el Lisp por primera vez, luego de borrar la pantalla y todos los procedimientos y variables que existan en la memoria.

Color y grficos de tortuga

CLSSintaxis: (cls)Limpia la pantalla igual que el CLS del Basic.

PAPERSintaxis: (paper x)Donde x = un valor de 0 al 7 para color, 8 transparencia y 9 contraste.Da color al fondo de la pantalla.

INKSintaxis: (ink x)Establece el color de la tinta en primer plano.

BORDERSintaxis: (border x)Establece el color del contorno de la pantalla como su equivalente en Basic.

FWD (forward)Sintaxis: (fwd x)Donde x = un argumento numrico ya sea positivo o negativo.Devuelve x. Hace que la pluma de dibujo avance o retroceda (+/-)x pasos.El punto inicial es el mismo del Spectrum. (fwd 50) a partir de ese punto, es igual que hacer en Basic: DRAW 0,50. Fwd al igual que FD en LOGO usa coord. Relativas en vez de absolutas. Requiere de Left y right para girar su curso.

LEFTSintaxis: (left x)Donde x = un nmero entero positivo tomado como ngulo de 0 a 360.Devuelve x. Le da a la pluma de dibujo un giro en direccin hacia la izquierda.

RIGHTSintaxis: (right x)Como LEFT, pero girando hacia la derecha. Tambin devuelve x.

PENUSintaxis: (penu [x])Alza la pluma de dibujo y devuelve la lista x dada como argumento.Sin argumentos da nil. Debe tener un argumento para activarse.Ejemplo> (penu 1) - Fwd ya no dibujar nada.

PENDSintaxis: (pend [x])Baja la pluma de dibujo y genera una lista x igual que penu.Sin argumentos devuelve nil. Como penu, pend tambin necesita al menos un argumento.Ejemplo> (pend 1) - permite a Fwd dibujar. (progn 1 (cls)(pend 1)(right 45)(fwd 100)) - dibuja una diagonal. (progn 1 (cls)(penu 1)(right 45)(fwd 100)) - mueve el cursor sin dibujar.Nota: ya que pend y penu devuelven el argumento como lista pueden usarse de la misma forma que quote para la gran mayora de casos. Por ejemplo: (pend amigo mio) es equivalente a (quote (amigo mio)).