Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Listas
Las
listas permiten representar una gran cantidad de cosas. Inclusive los programas en Lisp se expresan como listas! Las listas tienen una representacin escrita e interna. La representacin interna son cadenas de celdas cons. (a b c) (uno) (esto es 1 lista) Corresponden a una coleccin de expresiones-s encerradas entre parntesis y separadas por uno o ms espacios. Formalmente, una lista es una expresin tal que: Un tomo, nill o () es una lista. Una lista (S1 .S2) , donde S2 es una lista. (1 .(2 .(3 ))) (1 2 3)
La estructura de datos fundamental en Haskell son Podemos definirlas enumerando sus elementos o
Ejemplo:
Las definiciones [1,2,3,4,5] y [1.. 5] son equivalentes
Ejemplo de operadores
8:[] 6:8:[] 4:[6,8] head [1,2,3,4] tail [1,2,3,4] head [[1],2,3,4] -- resultado [8] -- resultado [6,8] -- resultado [4,6,8] -- resultado 1 -- resultado [2,3,4] -- ERROR - Cannot infer instance
[1,2] ++ [3,4]
[1,2] ++ 3:[4] null [] [1,2] == [1,2] [1,2] == 1:[2]
-- resultado [1,2,3,4]
-- resultado [1,2,3,4] -- resultado True
-- resultado True
Listas
> (Dos .(hombres .(y .(un .(destino . nill))))) (Dos hombre y un destino) > (300000 .((masa . nill) .(velocidad . nill) .(luz . nill))) (300000 ((masa) velocidad) luz)
Listas anidadas: ((1 uno) (2 dos) (3 tres)) Longitud de listas: (1 2 3) ((a b) (c d) (e f)) (a (1 2 3) d)
Representacin de Listas
(setf lista-ejemplo 666) (setf lista-ejemplo .(666))
NIL
Listas vacas: S-expresin especial que es a la vez un tomo y una lista Se representa por NIL o ( ) Representacin tradicional:
Para
diferenciar las listas de las funciones, se empieza la lista con el signo del apstrofe
Listas no vacas
La ms sencilla es la que tiene un nico elemento. Cualquier lista no vaca de n elementos se puede ver como una estructura en la que se repite n veces la estructura de la lista con un nico elemento. La lista elemental de un solo elemento, tiene dos tipos de informacin:
El dato correspondiente a esa posicin de la lista. El dato correspondiente al siguiente elemento de la lista.
Listas infinitas
Podemos
[1..]
Esta es una gran diferencia entre Haskell y otros lenguajes funcionales. Las listas infinitas y las funciones que calculan valores a partir de ellas son comunes en Haskell. Esto es posible gracias a la evaluacin lenta o perezosa (lazy) de Haskell. No se evala ningn elemento en ninguna funcin hasta que no sea necesario Las listas se almacenan internamente en un formato no evaluado
Listas
Ejemplo
de listas: listp
Identifica listas Sirve para distinguir lo que es nil o una lista no vaca de cualquier otra cosa. (listp <objeto>)
Identificacin
REST (CDR).- toma una lista como argumento y regresa una lista sin el primer elemento
CONS.- toma dos argumentos (normalmente el segundo es una lista) y regresa una lista con el primer argumento como primer elemento de la lista. NULL.- checa si una lista est vaca
Listado de funciones
Asignacin de valores
(setf x 2) (setq x 4)
Construccin de Listas
(cons a L) (cons 'h '(o l a)) (append L L) (append '(e s t a m o s) '(f e l i c e s)) (list a a) (list 'd 'e 'c 'o 'n 'o 'c 'e 'r 'e 'l 'l 'i 's 'p)