@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
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
GHCi, version 8.6.5