You are on page 1of 4

Tipos de datos

Cada valor tiene un tipo y hay tipos que estn predefinidos, como los enteros, reales etc.
Prelude > cos (-2*pi)
1.0 : : Double
Tipos de datos ms complejos
Prelude > [15]
[1, 2, 3, 4, 5] : : [Integer]
Prelude > sum [15]
15 : : Integer
Tipos de datos elementales:
- Booleanos (Bool, valores True y False)
- Enteros [Int e integer]
- Caracteres (char)
- Entre comillas simples (Ej. a y b) entre comillas doble hola
- Equivale a una lista de char [h, o, l, a] equivale a hola

Definicin de funciones En Haskell se definen en dos partes:
1. La primera identifica el nombre, el dominio y el intervalo de la funcin.
2. La segunda describe el significado de la funcin.
double x y = x + y
ghci > double 9 1
> 10
La definicin de variables en Haskell: es un mapeo de tipos entre el tipo de dato entrante y el tipo de dato del resultado de la
funcin.
Calculo : : (nombre de la funcin, seguida de dos puntos)
Calculo : : int int (tipo de los parmetros de la funcin seguida del signo y despus el tipo de resultado)

Propiedades de Haskell
Funciones de alto orden
Inferencia de tipos
Polimorfismo
Semntica no estricta, evaluacin perezosa
Listas por comprensin
Entrada / salida funcional

Operadores
: Aade un elemento al principio de una lista.
++ Concatena dos listas.
!! Devuelve el ensimo elemento de la lista x.
Length Devuelve el nmero de elementos de una lista.
Head Primer elemento de una lista.
Tail Resto de una lista.
take Toma n elementos del principio de una lista.
Drop Saca n elementos del principio de una lista.
Reverse Invierte los elementos de una lista.
Zip Crea una lista de pares.
Unzip Crea una par de listas.
Sum Suma los elementos de una lista.
Product Multiplica los elementos de una lista.

Definicin de funciones
Input Output
Any type of input ReadLn Print
string getLine Putstr, putStrLn


Evaluacin perezosa o lenta (lazy)
No se evala ningn elemento en ninguna funcin hasta que no sea necesario.
Las listas se almacenan internamente en un formato no evaluado.
Consiste en utilizar paso por nombre y recordar los valores de los argumentos ya calculados para evitar recalcularlos.
Tambin se le denomina Estrategia de pasos de parmetros por necesidad

Aplicativa, pueden haber muchas maneras de realizar la funcin.
Normal, solo hay una sola manera de realizar la funcin.
Listas
La estructura de datos elementales en Haskell son las listas. [1,2,3,4,5,6] = [1..6]
Definirlas enumerando sus elementos o utilizando el smbolo especial ..
<- representa al smbolo matemtico , que indica pertenencia a un conjunto.
Listas infinitas
- Para declarar una lista infinita [1..]
8:[]=8
6:8:[]=[6,8]
4:[6,8]=[4,6,8]
Head[1,2,8]=1
Tail[8,9,10]=[9.10]
Head[[1],2,3]=error
[1,2]++[3,4]=[1,2,3,4]
Null[]=true
[1,2]++3:[4]=[1,2,3,4]
[1,2]==1:[2]=true
Definir listas
Mediante corchetes y sus valores se separan por comes
Su funcin es concatenar dos (++) listas
No declarar listas en combinacin caracteres y enteros

Length.- toma una lista y devuelve su tamao. [5, 4, 3, 2, 1] = 5
Null.- comprueba si una lista esta vacia. Null [] = True null [2, 3] = False
Reverse.- invierte una lista. [5, 4, 3, 2, 1] = [1, 2, 3, 4, 5] [a, l, o, h] = hola
Take.- toma un nmero y una lista y extrae dicho nmero de elementos de una lista.
Take 3 [54321] = 543 take 2 [212]= 21 take 4 [212] = 212
Drop.- funciona de manera similar, solo quita un nmero de elementos del comienzo de la lista.
Drop 3 [54321] = 21
Maximum.- toma una lista de cosas que se pueden poner en algn tipo de orden y devuelve el elemento ms grande.
[98163] = 16 [921]= 9
Minimum.- devuelve el ms pequeo elemento de la lista. [921] = 1
Sum.= toma una lista de nmero y devuelve su suma. [1, 2,3] = 6
Product.- toma una lista de nmeros y devuelve su producto. [6, 2, 1,2] = 24
elem.- toma un elemento y una lista de elementos y nos dice si el elemento pertenece a la lista.
4 [1, 3, 16,4] = True 8 [1, 3, 16,4] = False

Implementacin de relaciones: listas por compresin
Haskell permite definir listas o secuencias mediante una notacin similar a la utilizada para escribir conjuntos por comprensin
en matemticas.

Sintaxis de una lista por comprensin
[expresin | cualificador, cualificador2,cualificador3]
Donde el cualificador puede ser:
Generador: expresin que genera una lista, Hugs>[x+x|x <-[1..10]]
Una guarda o filtro: una expresin de valor booleano, el significado de una lista por compresin con un nico filtro:
[e | condicin] = if condition then [e] else []
Una definicin local: se usa para definir elementos locales para la expresin. [2* x | x <- [1..5]]

Varios cualificadores
Las variables generadas por los cualificadores posteriores varan ms rpidamente que las generadas por los
cualificadores anteriores. [(x,y)|x<-[1..3],y<-[1..2]]
Los cualificadores podran utilizar los valores generados por los anteriores: [(x,y)|<-[1..3], y<-[1..x]
Las variables definidas en cualificadores posteriores ocultan las variables definidas por cualificadores anteriores.
o [x|x<-[[1,2],[3,4], x<-x]
o [x|x<-[1,2], x<-[3,4]]
Un cambio en el orden de los cualificadores pueden tener un efecto directo en la eficiencia. (mas reduccin)
o [(x,y) | x<-[1..3],y<-[1..2], evenx]
o [(x,y) | x<-[1..3], even x, y<-[1..2]]
Tuplas
Una tupla en haskell es un grupo de valores de distintos tipos encerrados entre parntesis y separados por comas (pepe, 22,
2312)
Type Entrada = (Persona, Edad, Telfono)
Type Persona = string
Type Edad= Integer
Type Telfono=String
Type lista = [Entrada]

Comparacin de patrones
Un patrn es una expresin como argumento en una ecuacin
Patrones constantes: un patrn contante puede ser un numero un carcter o un constructor de dato.
o F:: Integer->Bool
o F1=True
o F2=False
Patrones para listas. Es posible utilizar patrones a definir funciones que trabajen con listas.
o [] solo unifica con un argumento que sea una lista vacia
o [x], [x,y] etc solo unifican argumentos con lista de uno, dos, etc.
o [x:x5] unifica con listas con al menos un elemento
Patrones para tuplas:
o Primero2:: (Integer, Integer)-> Integer
o Primero2(x,y)=z
o Primero3:: (Integer, Integer, Integer)->integer
o Primero 3 (x,y,z)=x
Los patrones pueden anidarse:
o Sumapares::[(Integer,Integer)]->Integer
o Sumapares []-0
o Sumapares ((x,y)xs)=x+y+ sumapares xs
Patrones aritmticos: es un patrn de la forma (n+k), donde k es una valor constante natural
o Factorial :: Integer-> Integer
o Factorial 0=1
o Factorial (n+1)-(n+1)+factorial n
Patrones nombrados o seudnimos. Seudnimo o patrn alias para nombrar un patrn, y utilizar el seudnimo en vez
del patrn en la parte derecha de la definicin
o Factorialn:: Integer-> Integer
o Factorialn 0-1
o Factorialn m@(n+1)=m*factorialn n
El patrn subrayado. Un patrn subrayado (_) unifica con cualquier argumento pero no establece ninguna ligadura.
o Longitud ::[Integer]->Integer
o Longitud []=0
o Longitud (_:xs)=1+longitud xs
Patrones de evaluacion perezosa. La unificacin determina que ecuacin es seleccionada para reducir una expresin a
partir de la forma de los argumentos
o esVacia :: [a]->bool
o esVacia []=True
o esVacia(_:_)=False


Definiciones de listas por comprensin
Generadores
Prelude [x^2 | x <- [2..5]] [4, 9, 16, 25]
La expresin x <- [2..5] se llama un generador.

Generadores dependientes
(concat xss) es la concatenacin de la lista xss. Por ejemplo:
Concat [[1, 3], [2, 5, 6], [4, 7]] ~> [1, 3, 2, 5, 6, 4, 7]
Concat :: [[a]] -> [a]
Concat xss = [x | xs <- xss, x <- xs]
Generadores con variables annimas:
(primeros ps) es la lista de los primeros elementos de la lista de pares ps.
Primeros :: [(a, b)] -> [a]
Primeros ps = [x | (x, _) <- ps]
Primeros [(1, 3), (2, 5), (4, 8)]
(1, 2, 4)

Guardas
Un ejemplo para nmeros primos n es la lista de los nmeros primos menores o iguales que n.
Primos :: int -> [int]
Primos n = [ x | x <- [2..n], primox] primox es la guarda

Guarda Funcin zip: Es la lista obtenida emparejando los elementos de las listas x y y.
Prelude > zip [a, b, c] [2, 5, 4, 7]

Guarda ordenada: verifica si la lista esta ordenada.
Ordenada :: ord a -> [a] -> Bool
Ordenada xs = ord [x <- y (x, y) <- adyacentes xs]
Ordenada [2, 3, 4, 5] True
Ordenada [2, 8, 1] False

Cifrado Cesar: Cada letra en el texto original es reemplazada por otra letra que se encuentra 3 posiciones ms adelante en el
alfabeto.
Cifrado a = d
Cifrado Hola = k r o d
Let2int :: char -> int
Let2int c = ord c ord a
Let2int a -> 0
d -> 3
z -> 25

You might also like