Académique Documents
Professionnel Documents
Culture Documents
POTOSI
ALUMNA
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:
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.
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))
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
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])
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.
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)).