Recordando
Haskell
y an´
alisis del lenguaje
PostFix
Favio E. Miranda Perea Susana H. Mart´ın Lunas Fernando A. Galicia Mendoza
Facultad de ciencias,UNAM
Haskell
Es un lenguaje de programaci´on puramente funcional y fuertemente tipado. Algunas ventajas de Haskellson:
Programas concisos. Listas por comprensi´on.
Su caza de patrones y guardias.
Funciones de alto nivel (funciones que aceptan funciones). Efectos m´onadicos.
Listas
Las listas son una estructura que nos permite almacenar de forma ordenada un tipo de datos especifico.
data List a = Nil | Cons a (List a)
Su notaci´on es[a]con aun tipo cualquiera.
Un efecto de la evaluaci´on perezosa es posible crear listas de longitud infinita, sum´andole el mec´anismo de listas por comprensi´on es posible obtener grandes cantidades de datos en expresiones sencillas.
Ejemplo (Ejemplos de listas) Lista de n´umeros naturales:
[x | x <- [0..]]
Convertir una cadena a may´usculas:
upper s = [toUpper c | c <- s]
La funci´on zip puede ser implementada de la siguiente forma:
Listas
Las listas son una estructura que nos permite almacenar de forma ordenada un tipo de datos especifico.
data List a = Nil | Cons a (List a)
Su notaci´on es[a]con aun tipo cualquiera.
Un efecto de la evaluaci´on perezosa es posible crear listas de longitud infinita, sum´andole el mec´anismo de listas por comprensi´on es posible obtener grandes cantidades de datos en expresiones sencillas.
Ejemplo (Ejemplos de listas) Lista de n´umeros naturales:
[x | x <- [0..]]
Convertir una cadena a may´usculas:
upper s = [toUpper c | c <- s]
La funci´on zip puede ser implementada de la siguiente forma:
Listas
Las listas son una estructura que nos permite almacenar de forma ordenada un tipo de datos especifico.
data List a = Nil | Cons a (List a)
Su notaci´on es[a]con aun tipo cualquiera.
Un efecto de la evaluaci´on perezosa es posible crear listas de longitud infinita, sum´andole el mec´anismo de listas por comprensi´on es posible obtener grandes cantidades de datos en expresiones sencillas.
Ejemplo (Ejemplos de listas) Lista de n´umeros naturales:
[x | x <- [0..]]
Convertir una cadena a may´usculas:
upper s = [toUpper c | c <- s]
La funci´on zip puede ser implementada de la siguiente forma:
Listas pares
Queremos construir listas finitas de longitud par, las cuales denotaremos como:
<x1, . . . ,x2n>
data EList a = Nil | Cons a a (ListPar a) type EList = [(a,a)]
Listas pares
Queremos construir listas finitas de longitud par, las cuales denotaremos como:
<x1, . . . ,x2n>
data EList a = Nil | Cons a a (ListPar a)
type EList = [(a,a)]
Listas pares
Queremos construir listas finitas de longitud par, las cuales denotaremos como:
<x1, . . . ,x2n>
data EList a = Nil | Cons a a (ListPar a) type EList = [(a,a)]
Listas pares
Queremos construir listas finitas de longitud par, las cuales denotaremos como:
<x1, . . . ,x2n>
data EList a = Nil | Cons a a (ListPar a) type EList = [(a,a)]
Ejercicios
1 Definamos las funciones b´asicas de listas
(length,elem,append,reverse,head ymap) para el tipo EList a.
2 Definamos la funci´oncons2:
cons2a b <x1, . . . ,x2n>=<a,b,x1, . . . ,x2n>
3 Definamos la funci´onsnoc2:
snoc2 <x1, . . . ,x2n > a b=<x1, . . . ,x2n,a,b >
4 Definamos la funci´onat2:at2 <x1, . . . ,x2n> j =xj 5 Definamos la funci´ondelcenter2:
delcenter2 <x1, . . . ,xk,xk+1, . . . ,x2n>=
Lista dentro de listas, dentro de listas,. . .
Ahora algo mas complicado, queremos construir listas que contengas listas y estas a su vez contengan listas y as´ı sucesivamente.
Ejemplo
Estos son ejemplos de listas que queremos:
[[1,2,3],[1,2],[1,[2]],[[1,2],[[[3]]]]]
[[[[]]]]
Contrucci´
on y ejercicio
data LInfinity a = L [a] | Contain [LInfinity a]
Definamos una funci´on que reciba un ´arbol binario y devuelva un elemento de tipo LInfinity que lo represente.
Por ejemplo:
Contrucci´
on y ejercicio
data LInfinity a = L [a] | Contain [LInfinity a]
Definamos una funci´on que reciba un ´arbol binario y devuelva un elemento de tipo LInfinity que lo represente.
Por ejemplo:
Implementaci´
on de una pila
Pila es una estructura de datos para poder almacenar elementos bajo... Implementaci´on de una pila en Haskell.
type Pila a = [a]
Operaciones b´asicas sobre pilas.
top :: Pila a -> a top [] = error "Pila vacia."
top (x:xs) = x pop :: Pila a -> (a,[a]) pop [] = error "Pila vacia."
pop (x:xs) = xs
Implementaci´
on de una pila
Pila es una estructura de datos para poder almacenar elementos bajo... Implementaci´on de una pila en Haskell.
type Pila a = [a]
Operaciones b´asicas sobre pilas.
top :: Pila a -> a top [] = error "Pila vacia."
top (x:xs) = x pop :: Pila a -> (a,[a]) pop [] = error "Pila vacia."
pop (x:xs) = xs
Implementaci´
on de una pila
Pila es una estructura de datos para poder almacenar elementos bajo... Implementaci´on de una pila en Haskell.
type Pila a = [a]
Operaciones b´asicas sobre pilas.
top :: Pila a -> a top [] = error "Pila vacia."
top (x:xs) = x
pop :: Pila a -> (a,[a]) pop [] = error "Pila vacia."
pop (x:xs) = xs
Implementaci´
on de una pila
Pila es una estructura de datos para poder almacenar elementos bajo... Implementaci´on de una pila en Haskell.
type Pila a = [a]
Operaciones b´asicas sobre pilas.
top :: Pila a -> a top [] = error "Pila vacia."
top (x:xs) = x pop :: Pila a -> (a,[a]) pop [] = error "Pila vacia."
pop (x:xs) = xs
Implementaci´
on de una pila
Pila es una estructura de datos para poder almacenar elementos bajo... Implementaci´on de una pila en Haskell.
type Pila a = [a]
Operaciones b´asicas sobre pilas.
top :: Pila a -> a top [] = error "Pila vacia."
top (x:xs) = x pop :: Pila a -> (a,[a]) pop [] = error "Pila vacia."
pop (x:xs) = xs
Implementaci´
on de la sintaxis
Recordemos que un comando es: Una literal entera.
Una palabra reservada. Una secuencia de comandos.
Demos el tipo de datos para definir lo anterior.
data PF = POSTFIX deriving(Show)
Implementaci´
on de la sintaxis
Recordemos que un comando es: Una literal entera.
Una palabra reservada. Una secuencia de comandos.
Demos el tipo de datos para definir lo anterior.
data PF = POSTFIX deriving(Show)