• No se han encontrado resultados

Pres1 161

N/A
N/A
Protected

Academic year: 2020

Share "Pres1 161"

Copied!
20
0
0

Texto completo

(1)

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

(2)

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.

(3)

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:

(4)

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:

(5)

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:

(6)

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)]

(7)

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)]

(8)

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)]

(9)

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)]

(10)

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>=

(11)

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]]]]]

[[[[]]]]

(12)

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:

(13)

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:

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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

(19)

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)

(20)

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)

Referencias

Documento similar

[r]

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

Por ello, es fundamental desentrañar cuál es el contexto, el proyecto de ciudadanía y el concepto de equidad que propone la Educación Popular en relación a la calidad educativa,

La Constitución de Paraguay de 1992, no obstante proteger el derecho de propiedad y la libertad económica, es la que más se asemeja a las del nuevo constitucionalismo por

[r]

[r]

Las listas de distribución son un medio para que un grupo de personas compartan conocimientos y debatan sobre temas de interés común, todo ello a través del correo

“En ese momento pensamos que       estábamos haciendo un buen trabajo porque el petróleo estaba desapareciendo”, recuerda Gerald Boalch, biólogo marino de la