repl.it
@0ADT/

ClasesPrograAvanzadaUnlam

Haskell

Clase del martes 13 de noviembre de 2018

fork
loading
Files
  • main.hs
main.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
main = putStrLn "Terrorist win!"

sumatoria :: Integer -> Integer
sumatoria 0 = 0
sumatoria n = n + sumatoria (n-1)

valor :: Integer -> Integer
valor x = case (x `mod` 2) of
 0->1
 _->0

valor2 :: Integer -> Integer
valor2 x = if (x `mod` 2) == 0 then 1 else 0

contar :: [Integer] -> Integer
contar [] = 0
contar (x:xs) = valor x + contar xs

alCuadrado :: [Integer] -> [Integer]
alCuadrado n = map (^2) n

--sin usar map
todoAlCuadrado :: [Integer] -> [Integer]
todoAlCuadrado [] = []
--todoAlCuadrado [x] = [x*x]
todoAlCuadrado (x:xs) = (x*x):(todoAlCuadrado xs)

--apilar
apilar :: Integer -> [Integer] -> [Integer]
apilar x [] = [x]
apilar x xs = x:xs

--desapilar


--encolar 
encolar :: Integer -> [Integer] -> [Integer]
encolar x [] = [x]
--encolar x xs = xs ++ [x] --++junta dos arrays
encolar x (a:xs) = a:encolar x xs

--desencolar


elevarA :: Integer -> Integer -> Integer
elevarA x y = x ^ y

--elevarA es una funcion parcialmente evaluada
cuadrado x = elevarA x 2 --currying
cubo x = elevarA x 3

--pitagoras
square x = x*x
raiz x = sqrt x
suma x y = x+y
pitagoras x y = raiz (suma (square x)
  (square y))
  
--paso como argumentos una funcion y un argumento para 
-- esa funcion
sumar1 x = x+1
applyTwice f x = f (f x)
--applyTwice applyTwice cubo 2, se lee de izquierda a derecha, se hace dos veces el applyTwice y ese applyTwice hace dos veces el cubo 2

--Practica para final diciembre de 2019, de esta pagina salieron algunos ejemplos para resolver los problemas http://proyectosbeta.blogspot.com/2010/05/algunos-ejemplos-en-haskell.html
--1) Dado dos numeros enteros A y B, implemente una funcion que retorne la division entera de ambos por el metodo de las restas sucesivas.
divisionRestasSucesivas :: Integer->Integer->Integer
divisionRestasSucesivas x y = if(x < y) == True then 0 else 1+divisionRestasSucesivas (x-y) y 

--2) Dado dos numeros enteros A y B encuentre el MCD (maximo comun divisor) entre ambos.
mcd :: Integer->Integer->Integer
mcd x y = if(x==y) then x else if(x<y) then mcd x (y-x) else mcd (x-y) y

--3) Escribir una funcion para hallar la potencia de un numero
potencia3 :: Integer->Integer->Integer
potencia3 x y = x ^ y

--4)Definir una funcioin menor que devuelve el menor de sus dos argumentos enteros.
menor4 :: Integer->Integer->Integer
menor4 x y = if(x<y) then x else y

--5)Definir una funcion maxDeTres que devuelve el maximo de sus argumentos enteros
maxDeTres :: Integer->Integer->Integer->Integer
maxDeTres x y z = if(x>y && x>z) then x else if(y>x && y>z) then y else z

--6)Implemente una funcion recursiva para calcular el factorial de un numero
fact :: Integer->Integer
fact 0 = 1
fact x = x*fact (x-1)

-----Propios
sumarLista :: [Integer]->Integer
sumarLista [] = 0
sumarLista (x:xs) = x + sumarLista xs

multLista::[Integer]->Integer
multLista [x] = x
multLista [] = 0
multLista (x:xs) = x * multLista xs

multElem::[Integer]->Integer->[Integer]
multElem (x:xs) n = map(*n)(x:xs)
GHCi, version 8.6.5
?