Download Instituto Tecnológico de Tepic Programación Lógica y Funcional

Document related concepts
Transcript
Instituto Tecnológico de Tepic
Programación Lógica y Funcional
Alumno:
Nicolás Mendoza López
Trabajo:
EJERCICIOS DE PROGRAMACION EN HASKELL
PROGRAMACION FUNCIONAL Y EVALUACION
PEREZOSA
Contenido
INTRODUCCION................................................................................................... 3
1. Cuadrado de un numero...........................................................................4
2. Elevar un número a la cuarta potencia.................................................4
3. Sumar todos los elementos de una lista...............................................5
4. Ultima cifra de un número.......................................................................5
5. Número mayor de 3 números..................................................................5
6. Rota un elemento de la lista...................................................................6
7.
Rota n elementos de la lista.........................................................................6
8.
Obtener lista quitando extremos..................................................................7
9.
Ordenar lista de menor a mayor...................................................................7
10.
Obtener verdadero o falso.........................................................................8
11.
Sacar el cuadrado de los números pares de una lista y ordenarlos...........8
12.
Imprimir misma lista utilizando conjuntos.................................................9
13.
generar lista a partir de tope.....................................................................9
14.
Obtener números primos hasta tope.........................................................9
15.
Obtener una lista de los múltiplos de un numero....................................10
16.
Obtener lista de números pares gasta tope.............................................10
17.
Obtener lista de números impares hasta tope.........................................11
18.
Obtener tuplas a partir de tope de dos conjuntos de valores..................11
19.
Obtener la posición de una letra con tuplas............................................12
20.
Recorrido de un árbol en orden...............................................................12
CONCLUSION..................................................................................................... 13
INTRODUCCION
El presente documento trata sobre las diferentes funciones de haskell que se usaron durante
el transcurso de la unidad 2. Dichas funciones ayudaron o realizaron diferentes actividades,
como ordenar alguna lista, obtener números primos, eliminar algunos elementos de una
lista entre otras acciones.
DESARROLLO
1. Cuadrado de un numero
 Solución en haskell
cuadrado x = x*x
 Comprobación de funcionamiento

Prueba de escritorio (Evaluación Perezosa)
Cuadrado 3 = 3*3
=9
2. Elevar un número a la cuarta potencia.
 Solución en Haskell
cuadrado x = x*x
cuadruple x = cuadrado (cuadrado x)
 Comprobación de funcionamiento

Evaluación perezosa
Cuádruple 3 = cuadrado(cuadrado 3)
=cuadrado(3*3)
=cuadrado(9)
=9*9
=81
3. Sumar todos los elementos de una lista.
 Solución en Haskell
sumaLista [] = 0
sumaLista (x:xs) = x + sumaLista xs

Comprobación de funcionamiento

Evaluación perezosa
=1+ sumaLista[2,3,4]
=1+2+sumaLista[3,4]
=1+2+3+sumaLista[4]
=1+2+3+4+sumaLista[ ]
=10
4. Ultima cifra de un número.
 Solución en Haskell
ultimaCifra x= rem x 10
 Comprobación de funcionamiento

Evaluación perezosa
ultimaCifra 328= rem 328 x10
=8
5. Número mayor de 3 números.
 Solución en Haskell
maxTres a b c = max a (max b c)
 Comprobación de funcionamiento

Evaluación perezosa
maxTres 2 5 3 = max 2(max 5 3)
=max 5 3
=5
6. Rota un elemento de la lista.
 Solución en Haskell
rotaElemento xs = tail xs ++ [head xs]
 Comprobación de funcionamiento

Evaluación perezosa
rotaElemento[1,2,3]=[2,3]++[1]
=[2,3,1]
7. Rota n elementos de la lista
 Solución en Haskell
rota n xs = drop n xs ++ take n xs

Comprobación de funcionamiento

Evaluación perezosa
Rota 3 [1,2,3,4]=drop 3 [1+2+3]++ take 3 [1,2,3,4]
=[4]++[1,2,3]
=[4,1,2,3]
8. Obtener lista quitando extremos
 Solución en Haskell
centros1 xs = init (tail xs)

Comprobación de funcionamiento

Evaluación perezosa
Centros1 [1,2,3,4]= init (tails [1,2,3,4])
=init [2,3,4]
=[2,3]
9. Ordenar lista de menor a mayor.
 Solución en Haskell
ordena [] = []
ordena (x:xs) =
(ordena menores) ++ [x] ++ (ordena mayores)
where
menores = [a|a<-xs, a<=x]
mayores = [b|b<-xs, b>x]

Comprobación de funcionamiento

Evaluación perezosa
Ordena [77,3,2]= ordena menores ++ [77]++ordena mayores
=ordena [3,2]++[9]++ordena[]
=ordena menores ++ [3]++ordena ++[77]++[]
=ordena[2]++[3]++ordena[]++[77]++[]
=ordena menores ++[2]++ordena mayores++ [3]++[]++[77]++
[]
=ordena[]++[2]++ordena[]++[3]++[]++[77]++[]
=[]++[2]++[]++[3]++[]++[77]++[]
=[2,3,77]
10.

Obtener verdadero o falso
Solución en Haskell
parimpar x = even x

Comprobación de funcionamiento

Evaluación perezosa
11.
Sacar el cuadrado de los números pares de una lista y
ordenarlos.
 Solución en Haskell
cuadrado2 [] = []
cuadrado2 (x:xs) =
ordena(
if even x then
[x*x]++ cuadrado2 xs
else
[x]++ cuadrado2 xs
)

Comprobación de funcionamiento

Evaluación perezosa

Imprimir misma lista utilizando conjuntos
Solución en Haskell
12.
imprimir xs = [x | x <-xs]

Comprobación de funcionamiento

Evaluación perezosa

imprimir [1,2,3] = [1,2,3]

generar lista a partir de tope
Solución en Haskell
13.
generarLis tope = [x | x <- [1..tope]]

Comprobación de funcionamiento

Evaluación perezosa
generrLis 7=[1,2,3,4,5,6,7]
14.

Obtener números primos hasta tope
Solución en Haskell
generar = criba [2..]
where criba [] = []
criba (n:ns) = n: criba (elimina n ns)
elimina n xs = [x | x <- xs, x `mod` n /=0]
primo x = x == head (dropWhile (<x) generar)
primos tope=[x|x<-[1..tope],primo x]

Comprobación de funcionamiento

Evaluación perezosa
Primos 6 = [2,3,5]
15.

Obtener una lista de los múltiplos de un numero
Solución en Haskell
multiplos tope =
[x | x <-[1..tope], tope `mod` x == 0]

Comprobación de funcionamiento

16.

Evaluación perezosa
Múltiplos= [1,2,3,5,10]
Obtener lista de números pares gasta tope
Solución en Haskell
pares tope = [x | x <-[1..tope], even x]

Comprobación de funcionamiento

Evaluación perezosa
Pares 10=[2,4,6,8,10]
17.

Obtener lista de números impares hasta tope
Solución en Haskell
impares tope = [x | x <-[1..tope], odd x]

Comprobación de funcionamiento

Evaluación perezosa
Impares 10,[1,3,5,7,9]
18.
Obtener tuplas a partir de tope de dos conjuntos de
valores
 Solución en Haskell
tupla x =
[(w,z) | (w,z) <- zip ['a'..'z'][1..x]]

Comprobación de funcionamiento

Evaluación perezosa

Obtener la posición de una letra con tuplas.
Solución en Haskell
19.
posicionLetra x =
[z | (w,z) <- zip ['a'..'z'][1..], w == x]

Comprobación de funcionamiento

Evaluación perezosa

Recorrido de un árbol en orden.
Solución en Haskell
enorden(x id) =enorden i++[x]++ enordend
20.



Comprobación de funcionamiento
Evaluación perezosa
=enorden 2++[3]++enorden4++[9]++enordenH++[10]+
+enordenH
=enordenH++[2]++enordenH++[3]++enordenH hoja++[4]+
+enordenH++[9]++[ ]++[10]++[ ]
=[ ]++[2]++[ ]++[3]++[ ]++[4]++[ ]++[9]++[ ]++[10]++[ ]
=[2,3,4,9,10]
CONCLUSION
Es un poco confuso el manejo de las funciones en haskell, sin embargo lo que
sorprende es como se puede obtener un mismo resultado de diferentes
maneras, ya sea usando una única función o implementando algunas otras
acciones pero que al final se obtienen el mismo resultado que se busca.