Translate

viernes, 15 de junio de 2012

Tipos de datos en Lisp


Tipos de datos en Lisp:

En Lisp tenemos: números, cadenas de caracteres, listas, símbolos y funciones.

CADENAS DE CARACTERES
Las cadenas de caracteres van entre comillas, como en otros lenguajes:

> “esto es una cadena”
“esto es una cadena”

SIMBOLOS
Los símbolos son espacios de memoria que pueden contener valores tal como lo hacen las variables en otros lenguajes. Sin embargo, aquí un símbolo es algo mas que lo que llamamos variable en otros lenguajes, así como ellas tiene un nombre que es una cadena de caracteres, y puede tener un valor asociado que puede ser un numero, una cadena o una lista. Pero además del espacio de valor, posee otros dos espacios: un espacio de función, y un espacio de lista de propiedades o plist.


Una de las manera de asignar un valor a un símbolo es usando setq:

> (setq x “Hola”)
“Hola”
> (setq y 45)
45

El intérprete siempre evalúa lo que pongamos en el prompt. Si colocamos el símbolo, evaluará y devolverá su valor.

> x
“Hola”

> y
45

Si colocamos cualquier valor, devolverá el valor mismo.

> “Gato”
“Gato”

Si colocamos una función devolverá el resultado luego de evaluarla:

> (cuadrado 3)
9

Para desactivar la evaluación usamos la función quote y nos devolverá el símbolo mismo:

> (quote x)
X

Para simplificar el uso de quote se usa la comilla simple:

> 'x
X

> 'y
Y

LISTAS
Las listas pueden contener números, cadenas, símbolos, funciones y otras listas. Una de las maneras de hacer una lista es desactivando la evaluación:

> '(1 4 56)
(1 4 56)

Pues de lo contrario evaluará a la lista, tomándola como una función:

> (1 4 56)
*** - EVAL: 1 is not a function name; try using a symbol instead

El intérprete intenta tomar a 1 como nombre de una función y el resto serían sus argumentos. Como no se pueden usar números como nombres de función devuelve error.

Otro ejemplo:
> '(cuadrado 4)
(CUADRADO 4)

Como la evaluación está desactivada, el intérprete devuelve la lista formada por el símbolo cuadrado y el número 4. Con la evaluación activa:

> (cuadrado 4)
16

Evalúa la función cuadrado y devuelve el resultado correspondiente.

Otro ejemplo de lista y van...
> '(2.32 -7 4E-5 #C(1 -1) “esta lista es copada” (1 2 3 a) b)
(2.32 -7 “esta lista es copada” (1 2 3 A) B)


NUMEROS
Los números pueden ser enteros, decimales, de coma flotante, fracciones o complejos.

Tipos
Ejemplos
Enteros
> -3
-3
> 5
5
Decimales
> 7.8
7.8
> 3.14159265
3.14159265
Notación Científica
> 4.46E4
44600.0

> 1.65E6
1650000.0
> 7.9E-12
7.9E-12

> 8.2E32
8.2E32
Fracciones
> 2/3
2/3
> -5/8
-5/8
Complejos
El primer valor corresponde a la parte real, el segundo a la imaginaria.
> #C(2 3)
#C(2 3)


> #C(-1 5)
#C(-1 5)

Algunas Operaciones Aritméticas

Operación Aritmética
Ejemplos
Suma
> (+ 1 2)
> 3

> (+ 3.2 7)
10.2
> (+ 3/2 1/5)
17/10

> (+ #C(2 3) #C(1 -5))
#C(3 -2)
Resta
> (- 6 9)
-3
> (- #C(1 1) #C(2 3))
#C(-1 -2)
Multiplicación
> (* 3 4)
12
> (* 2 3 7)
42
División
> (/ 4 -2)
-2
> (/ 15 6)
5/2
Potencia
> (expt 2 3)
8

> (expt 7/8 5)
16807/32768
> (expt #C(4 -1) -2)
#C(15/289 8/289)
Raíz cuadrada
> (sqrt 16)
4


PD: Aquí tengo el libro de Cooper traducido al español:
Técnicas Básicas de Lisp - David Cooper.pdf