PDF de programación - Manual de Lisp para IACS

Imágen de pdf Manual de Lisp para IACS

Manual de Lisp para IACSgráfica de visualizaciones

Publicado el 17 de Agosto del 2017
664 visualizaciones desde el 17 de Agosto del 2017
78,1 KB
18 paginas
Creado hace 21a (21/07/2002)
Dpto. de Álgebra, Computación, Geometría y Topología

Universidad de Sevilla

Manual de Lisp para IACS (Curso 91–92)

Sevilla, 1992

Contenido

1 Introducción

Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
1.2 Los objetos básicos . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Funcionamiento básico del intérprete . . . . . . . . . . . . . .

2 Definición de funciones y variables

2.1 Definición de funciones . . . . . . . . . . . . . . . . . . . . . .
2.2 Definición de variables
. . . . . . . . . . . . . . . . . . . . . .

3 Funciones sobre números
3.1 Operaciones aritméticas
3.2 Funciones numéricas

. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .

4 Expresiones condicionales y predicados

4.1 Valores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Predicados numéricos . . . . . . . . . . . . . . . . . . . . . . .
4.3 Condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Operadores lógicos
. . . . . . . . . . . . . . . . . . . . . . . .

5 Funciones de control de la evaluación

5.1
Inhibición de la evaluación . . . . . . . . . . . . . . . . . . . .
5.2 Forzamiento de la evaluación . . . . . . . . . . . . . . . . . . .

1
1
1
2

2
2
3

3
3
5

5
5
5
7
8

8
8
9

6 Funciones sobre átomos y listas

9
9
6.1 Funciones básicas sobre listas
. . . . . . . . . . . . . . . . . .
6.2 Predicados de tipos . . . . . . . . . . . . . . . . . . . . . . . .
9
6.3 Predicados de igualdad . . . . . . . . . . . . . . . . . . . . . . 10
6.4 Funciones auxiliares sobre listas . . . . . . . . . . . . . . . . . 10
6.5 Funciones de aplicación . . . . . . . . . . . . . . . . . . . . . . 12

7 Misceláneas

13
7.1 El rastreador
. . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.2 Funciones de escritura . . . . . . . . . . . . . . . . . . . . . . 13
7.3 Funciones sobre cadenas
. . . . . . . . . . . . . . . . . . . . . 13
7.4 Funciones sobre el sistema . . . . . . . . . . . . . . . . . . . . 14

8 El editor y los ficheros de programas

14
8.1 Llamada al editor . . . . . . . . . . . . . . . . . . . . . . . . . 14
8.2 Funciones del editor . . . . . . . . . . . . . . . . . . . . . . . . 14
8.3 Funciones para cargar ficheros . . . . . . . . . . . . . . . . . . 14

ii

Índice

15

iii

1 Introducción

1.1 Introducción

Para cargar el LeLisp se escribe:

C> lelisp

y el sistema responde indicando la versión y se entra en el bucle principal
del intérprete que va, indefinidamente a leer una expresión sobre el terminal,
evaluarla e imprimir el valor de esta evaluación. LeLisp indica que espera la
lectura de una expresión imprimiendo el carácter ? al comienzo de cada línea.
El valor de la evaluación de una expresión se imprime en la línea siguiente
precedido por =. Para salir se escribe (end).
Veamos un ejemplo de sesión en LeLisp:

C> lelisp
? (+ 2 3)
= 5
* (end)
C>

1.2 Los objetos básicos

Los objetos que se usan en Lisp se llaman S–expresiones (por “Symbolic
expressions”).
Estos objetos se clasifican en los siguientes tipos:

 átomos

listas

 números

símbolos
cadenas de caracteres

S–expresiones

S–expresión
átomo

Para referirnos a dichos objetos, usaremos las siguientes abreviaturas:
s
a
simb símbolo
n
número
l
lista
Los átomos
Los símbolos son cadenas continuas de caracteres (conteniendo al menos un
carácter no numérico). Por ejemplo, agua, a12, var-aux, + son símbolos.
LeLisp manipula números enteros (desde -32767 a 32767), decimales (por
ejemplo, 23.45) y notación científica (por ejemplo, 3.256e+102).

1

Una cadena de caracteres es una sucesión de caracteres, con o sin huecos,
que comienza y termina por dobles comillas. Por ejemplo, "a 1 23" es una
cadena de caracteres.
Las listas
Una lista es una sucesión ordenada, posiblemente vacía, de objetos. Sintácticamente,
se compone de un paréntesis abierto, objetos separados por huecos y un
paréntesis cerrado. Por ejemplo, (a 1 b), (), (a (b (c))) son listas.

1.3 Funcionamiento básico del intérprete

Evaluación de los átomos
El valor de un número es el propio número.
El valor de un símbolo es:

• el número que tenga asignado, si actúa como variable numérica;
• la S–expresión que tenga asignada, en caso contrario.

El valor de una cadena de caracteres es la propia cadena.
Evaluación de las listas
Las listas se interpretan como llamadas a funciones. El primer elemento es
el nombre de la función y el resto son los argumentos. Por ejemplo, la lista
(+ 2 3), se interpreta como la función + actuando sobre 2 y 3.

2 Definición de funciones y variables

2.1 Definición de funciones

(defun simb l s1...sN)

permite definir nuevas funciones.

simb es el nombre de la función definida.

l es la lista de parámetros (argumentos); son variables locales que no
afectan a posibles valores previos, en general. Si no hay argumentos,
es obligatorio poner ().

s1,..., sN son las expresiones que definen el cuerpo de la función.

Devuelve simb.

? (defun cuadrado (n) (* n n))
= cuadrado
? (cuadrado 3)

2

= 9

((lambda (var1...varN) s1...sM) val1...valN)

asocia los valores val1,..., valN a las variables var1,..., varN; evalúa
las expresiones s1,..., sM y devuelve el valor de sM.

((lambda (n) (* n n)) 3) => 9

2.2 Definición de variables

(setf simb1 s1 simb2 s2 ... simbN sN)

asigna a simb1 el valor de la expresión s1, ..., a simbN el valor de la
expresión sN y devuelve el valor de la última expresión.

(setf x 3 y (+ x 2))
y

=> 5
=> 5

(setq simb1 s1 simb2 s2 ... simbN sN)

es equivalente a (setf simb1 s1 simb2 s2 ... simbN sN).

(let ((var1 val1)...(varM valM)) s1...sN)

asocia, en paralelo, a las variables vari los valores vali, evalúa las
expresiones si y devuelve el valor de sN.

(b 3))

(+ a b))

? (let ((a 2)
?
?
= 5
? a
** error: a variable sin valor

3 Funciones sobre números

3.1 Operaciones aritméticas

(+ n1 n2 ... nN)

devuelve el valor de la suma n1 + n2 + ... + nN .

3

(+ 3 7 5)

=> 15

(1+ n)

es equivalente a (+ n 1).

(- n1 n2 ... nN)

devuelve el valor de n1 − n2 − ... − nN , si N > 1 y −n1, si N = 1.

(- 3)
(- 123 7 5)

=> -3
=> 111

(1- n)

es equivalente a (- n 1).

(abs n)

devuelve el valor absoluto de n.

(abs -3.6)

=> 3.6

(* n1 n2...nN)

devuelve el valor del producto n1.n2...nN .

(* 2 7 5)

=> 70

(/ n1 n2)

devuelve el valor de dividir n1 por n2.

(/ 6 2)
(/ 5 2)

=> 3.0
=> 2.5

(/ n)

es lo mismo que (/ 1 n); es decir, devuelve el inverso de n.

(/ 2)
(/ 0.5)

=>
0.5
=> 2.0

4

(modulo n1 n2)

devuelve el resto de la división entera de n1 por n2.

(modulo 7 2)

=> 1

(quo n1 n2)

devuelve cociente entero de n1 por n2.

(quo 7 2)

=> 3

3.2 Funciones numéricas

(sqrt n)

devuelve la raíz cuadrada de n.

(power n m)

devuelve el valor de nm.

(random n m)

devuelve un número aleatorio del intervalo [n, m).

4 Expresiones condicionales y predicados

4.1 Valores lógicos

()

t

su valor es () y representa “lo falso”.

su valor es t y representa “lo verdadero”.

4.2 Predicados numéricos

(= n1 ... nN)

devuelve t si los valores de todos los argumentos son iguales; (), en
caso contrario.

(= 10 (+ 3 7))
=> t
(= 2 2.0 (+ 1 1)) => t
(= 1 2 3)

=>

()

5

(= 1 2 1)

=>

()

(/= n1 ... nN)

devuelve t si los valores de todos los argumentos son distintos; (), en
caso contrario.

(/= 10 (+ 3 7))
=> ()
(/= 2 2.0 (+ 1 1)) => ()
(/= 1 2 3)
(/= 1 2 1)

=>
=>

t
()

(>= n1 ... nN)

devuelve t si n1 ≥ . . . ≥ nN ; (), en otro caso.

(>= 4 3 3 2) =>
(>= 4 3 3 5) =>

t
()

(> n1 ... nN)

devuelve t si n1 > . . . > nN ; (), en otro caso.

(> 4 3 2 1) =>
(> 4 3 3 2) =>

t
()

(<= n1 ... nN)

devuelve t si n1 ≤ . . . ≤ nN ; (), en otro caso.

(<= 2 3 3 4) =>
(<= 5 3 3 4) =>

t
()

(> n1 ... nN)

devuelve t si n1 < . . . < nN ; (), en otro caso.

(< 1 2 3 4) =>
(< 1 3 3 4) =>

t
()

6

(zerop n)

es equivalente a (= n 0).

(evenp n)

devuelve t si n es par; (), en caso contrario.

(oddp n)

devuelve t si n es impar; (), en caso contrario.

4.3 Condicionales

(if s s1 s2)

devuelve s1, si s no es () y s2, en caso contrario.

(if t
(if ()

1 2) => 1
2
1 2) =>

(cond l1...lN)

es la función condicional más general de Lisp. Cada li tiene una es-
tructura del tipo:

(condicion s1...sM)

cond va evaluando las condiciones; cuando encuentra la primera dis-
tinta de (), evalúa las correspondientes expresiones si y devuelve el
valor de la última.

Si la condición seleccionada no va acompañada de expresiones, devuelve
justamente el valor de la condición.

Si ninguna condición se satisface, devuelve ().

Para forzar la selección, suele escribirse t para la última condición; su
sentido viene a ser “en otro caso...”

(cond ((n 5) ’suspenso)
((n 7) ’aprobado)
((n 9) ’notable)
(t ’sobresaliente) ))

? (defun notas (n)
?
?
?
?
= notas
? (notas 8)
= notable

7

4.4 Operadores lógicos

(not s)

devuelve t, si s es (); (), si no.

(or s1...sn)

evalúa sucesivamente s1,..., sN hasta que una de dichas expresiones
tenga un valor distinto de () y devuelve este valor. Si el valor de todas
las expresiones es (), entonces devuelve ().

(or () 2 3) => 2

(and s1...sn)

evalúa sucesivamente s1,..., sN hasta que el valor de una de dichas
expresiones sea (); en cuyo caso, devuelve (). Si el valor de todas las
expresiones es distinto de (), entonces devuelve el valor de sn.

(and 1 2 3)
(and 1 () 3)

=> 3
=>

()

5 Funciones de control de la evaluación

5.1 Inhibición de la evaluación

(quote s)

devuelve s (sin evaluar).

(quote (+ 2 3)) => (+ 2 3)
(quote a)

=> a

’s

es lo mismo que (quote s).

’(+ 2 3) => (+ 2 3)
’a

=> a

8

5.2 Forzamiento de la evaluación

(eval s)

devuelve el valor de s.

(eval (cons ’+ ’(2 3))) =>

5

6 Funciones sobre átomos y listas

6.1 Funciones básicas sobre listas

(car l)

devuelve el primer elemento de l.

(car ’(a b c)) => a

(cdr l)

devuelve la lista formada por los elementos de l, excepto el primero.

(cdr ’(a b c)) => (b c)
(cdr ())

=> ()

(cons s l)

devuelve la lista
  • Links de descarga
http://lwp-l.com/pdf6504

Comentarios de: Manual de Lisp para IACS (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad