Vous êtes sur la page 1sur 9

INSTITUTO TECNOLOGICO DE SAN LUIS

POTOSI

Palabras reservadas Lisp

ALUMNA

Ortiz Lpez Alma Delia


PROFESOR: Gloria del Carmen Rendon Sustait

Programacion 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
el
error '1 IS NOT A FUNCTION' en
cambio:
(eval (car (1 3)) - ejecutar la
funcin car si existiese y evala su
sintaxis.
QUOTE
Sintaxis: (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.

SET
Sintaxis: (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.
SETQ
Sintaxis: (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.
APPLY
Sintaxis: (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.
FUNCTION
Sintaxis: (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:
CAR
Sintaxis: (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.
CDR
Sintaxis: (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.
CADR
Sintaxis: (cadr x)
Equivale a hacer (car (cdr x))
Ejemplo: (cadr (pend 1 2 3 4 5)) dar 2 como resultado.
CDDR
Sintaxis: (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)
LIST
Sintaxis: (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)
RPLACA
Sintaxis: (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)))
RPLACD
Sintaxis: (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))

REVERSE
Sintaxis: (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:
PLUS
Sintaxis: (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.
TIMES
Sintaxis: (times x y)
Permite la multiplicacin de dos
valores.
(* x1 ... xn) es admitido por otros
Lisp, no por Spec-lisp.
DIV
Sintaxis: (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.

ADD1
Sintaxis: (add1 x)
Aade o suma un 1 al valor x.
Equivale a (1+ x) de otros Lisp.
SUB1
Sintaxis: (sub1 x)
Substrae o resta 1 al valor x
Equivale a (1- x) de otros Lisp.

Predicados:
ATOM
Sintaxis: (atom x)
Comprueba si el argumento x es o
no un tomo.
ZEROP
Sintaxis: (zerop x)
Verifica si x es cero.
NUMBERP
Sintaxis: (numberp x)
Comprueba si el argumento x es o
no un nmero.
MINUSP
Sintaxis: (minusp x)
Da T si x es un nmero negativo.
GREATERP
Sintaxis: (greaterp x y)
Devuelve T si x es mayor que y. En
caso contrario da Nil.
Equivale a (> x y) de otros Lisp.
LESSP
Sintaxis: (lessp x y)
Devuelve T si x es menor que y. Nil
si no.
Equivale a (< x y) de otros Lisp.

NULL
Sintaxis: (null x)
Da T si x es una lista vaca (). Nil
para cualquier otro caso.
EQ
Sintaxis: (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.
EQUAL
Sintaxis: (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.
MEMBER
Sintaxis: (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:
NOT
Sintaxis: (not x)
Niega el argumento x.
AND
Sintaxis: (and x y)
Da T si ambos argumentos son
verdaderos, Nil en caso contrario.
OR

Sintaxis: (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.
WHILE
Sintaxis: (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 definir
p = parmetro(s)
a = accin a llevar a cabo
Permite 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.
CSET
Sintaxis: (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.
CSETQ
Sintaxis: (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.
PUTPROP
Sintaxis: (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
crear
Aade 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)))
GET
Sintaxis: (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)
REMPROP
Sintaxis: (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:
READ
Sintaxis: (read)
Lisp espera a que se ingrese un dato
por teclado seguido de ENTER.

PRINT
Sintaxis: (print x)
Evala el argumento 'x' y lo imprime
en una lnea aparte.
Otras versiones admiten terpri,
prin1 y princ, las cuales son
inexistentes en
Spec-lisp.
PRT
Sintaxis: (prt)
Hace que todo cuanto se escriba,
aparezca por la impresora en vez de
por la pantalla, hasta que uno tipee
"(exit)".
SAVE
Sintaxis: (save n)
Salva en casete la informacin bajo
el nombre n.
LOAD
Sintaxis: (load [n])

Carga en memoria los programas


salvados en el casete.
Si no se da un nombre, carga el
primer archivo que encuentre.

EXIT
Sintaxis: (exit)
Interrumpe cualquier evaluacin en
curso.

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

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

Otros comandos y
funciones
TRACE
Sintaxis: (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.
NILL
Sintaxis: (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.
OBLIST
Sintaxis: (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.

PCH
Sintaxis: (pch x)
Imprime el cdigo ascii
correspondiente a x cuando es
usado directamente. Devuelve x.
Equivale a la funcin (tyo x) de otros
lisp.
STACK
Sintaxis: (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


CLS
Sintaxis: (cls)
Limpia la pantalla igual que el CLS
del Basic.
PAPER
Sintaxis: (paper x)
Donde x = un valor de 0 al 7 para
color, 8 transparencia y 9 contraste.
Da color al fondo de la pantalla.
INK
Sintaxis: (ink x)
Establece el color de la tinta en
primer plano.

BORDER
Sintaxis: (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.
LEFT
Sintaxis: (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.
RIGHT

Sintaxis: (right x)
Como LEFT, pero girando hacia la
derecha. Tambin devuelve x.
PENU
Sintaxis: (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.
PEND
Sintaxis: (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)).

Vous aimerez peut-être aussi