Created
June 3, 2017 01:43
-
-
Save harpiechoise/3804d95af91bc6fefcc3a4164b8c86ab to your computer and use it in GitHub Desktop.
Si estas empezando en haskell esto te sera util
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--doble de x * doble de y | |
dobleUs x y = x * 2 + y * 2 | |
--con dos Funciones | |
doble x = x + x | |
dobleUs2 x y = doble x + doble y | |
--triple ? | |
triple x = doble x + x | |
tripleUs x y = triple x * triple y | |
--Condiciones | |
mult2 x = if x > 100 | |
then 0 | |
else 2 * x | |
--doble de un numero < 100 + 1 | |
dobleSmallNum num = (if num > 100 then 0 else 2 * num) + 1 | |
--Las funciones pueden tener apostrofe | |
connan'oRyan = "Hola soy Connan O'Ryan" | |
--concatenar listas | |
listaCont = [1,2,3] ++ [4,5] | |
--Salida: [1,2,3,4,5] | |
listaWord = ['h','o','l','a'] ++ [' ','a','m','i','g','o'] | |
--Salida "hola amigo" | |
--las Listas de caracteres son = a un String dehecho las strings son listas de caracteres en haskell | |
--Se puede concatenar con el operador : | |
gatoNegro = 'U':"n gato negro" | |
--Salida: "Un gato negro" | |
--[3,4] ++ 5 Error | |
--Solucion: | |
--[3,4] ++ [5] | |
--El operador ++ solo puede concatenar listas no elementos | |
--[3,4] : 5 OK | |
--Tomar un elemento de una lista por su indice | |
letra = "Hola" !! 0 | |
--Salida: h | |
--listas | |
--Operaciones Listas: | |
--Head lista = [0] el primer numero | |
--head = lista --> elemento | |
--Tail Lista = [1,2,3] lo que viene despues de la cabeza | |
--tail = lista --> lista | |
--Init lista = [0,1,2] lo que viene al inicio de la lista menos el ultimo elemento | |
--init = lista --> lista | |
--Last lista = [3] El ultimo elemento de una lista | |
--last = lista --> elemento | |
--length lista = Devuelve el numero de elementos de la lista | |
--Lenght = lista --> entero | |
--Null lista = Comprueba si la lista esta bacia | |
--Null = lista --> booleano | |
--Reverse lista = devuelve la lista a la inversa | |
--Reverse = lista --> lista | |
--Take lista = toma los primeros elmentos de la lista dependiendo de los parametros de entrada | |
--Sintax take 3 [5,6,7,8] = [5,6,7] | |
--take = lista --> lista | |
--Drop lista = el inverso de take | |
--drop = lista --> lista | |
--Sintax drop 3 [5,6,7,8] = [8] | |
--Minimum: muestra el elemento con menos valor de la lista | |
--minimum: lista --> entero || double | |
--Sintax minimum [5,6,7,8] = 5 | |
--Maximum: muestra el elemento con mas valor de la lista | |
--maximum: lista --> entero || double | |
--Sintax maximum [5,6,7,8] = 8 | |
--Sum = Suma todos los elementos de la lista | |
--Sum: lista -> entero || double | |
--Product = Multiplica los valores de las listas | |
--Product: lista -> entero || double | |
--Elem = toma un valor y comprueba si esta en la lista | |
--valor `elem` lista: Entero && lista --> booleano | |
--Sintax = 1 `elem` [1,2,3,4] Retorna True | |
--Rango: Crea una lista de valores consecutivos o no consecutivos dentro de una lista | |
--[1..10] = lista --> lista | |
--Sintax [1..n] n = Cualquier valor entero mayor a 0, en este caso | |
-- ['a'..'z'] tambien es valido | |
--Rango con step = [1,3..10] retorna los elementos con un paso equivalente a la distancia entre esos dos numeros | |
--3 - 1 = 2 es decir [1,3..10] = [1,3,5,7,9] | |
--Sintax [1,numMayoralPrimero..n] n = cualquier valor entero mayor a 0, en este caso | |
--nota: Para hacer una lista con numero descendentes del 20 al 1 | |
-- [20,19..1] | |
--nota: los numeros de coma flotantes pueden dar valores no esperados | |
--ejemplos: [0.1,0.2..0.9] | |
--[0.1,0.2,0.30000000000000004,0.4000000000000001,0.5000000000000001,0.6000000000000001,0.7000000000000001,0.8,0.9] | |
--Conjuntos | |
--Diez primeros numeros pares enteros | |
conjunto = [x*2 | x <- [1..10]] | |
--Salida: [2,4,6,8,10,12,14,16,18,20] | |
--conjunto con predicados los predicados se ponen con una "," | |
conjuntoPred = [x*2 | x <-[1..20], x^2 < 20] | |
--Salida: [2,4,6,8] | |
--conjunto con predicados ejemplo 2 | |
--numeros que divididos por 7 su resto da 3 | |
conjuntoMod = [x*2 | x <-[1..100], mod x 7 == 3] | |
--Salida: [6,20,34,48,62,76,90,104,118,132,146,160,174,188] | |
--Funcion | |
boomBang xs = [if x < 10 then "Boom" else "Bang" | x <- xs, odd x] | |
--boomBang [1..20] | |
--Salida: ["Boom","Boom","Boom","Boom","Boom","Bang","Bang","Bang","Bang","Bang"] | |
--funcion: Todos los elementos de una lista que no sean [13,15,19] | |
conjuntoEx xs = [x | x <- xs, x /= 13 , x /= 15 , x/= 19] | |
--Nota: la negacion se representa con /= = no es igual | |
--Entrada conjuntoEx [1..20] | |
--Salida: [1,2,3,4,5,6,7,8,9,10,11,12,14,16,17,18,20] | |
--Se pueden usar mas de una lista | |
conjuntoDoble = [x * y | x <- [6..10], y <- [1..5]] | |
--Con esta declaracion se prueban todas las conbinaciones posibles | |
--Entrada [6..10] [1..5] | |
--Salida: [6,12,18,24,30,7,14,21,28,35,8,16,24,32,40,9,18,27,36,45,10,20,30,40,50] | |
--Si queremos filtrar numeros cuyo valor sea mayor a 80 | |
conjuntoDobleEx xs ps = [x * y | x <- xs,y <- ps, x*y > 80] | |
--Entrada conjuntoDobleEx [1..10] [10..15] | |
--Salida [84,90,84,91,98,105,88,96,104,112,120,90,99,108,117,126,135,100,110,120,130,140,150] | |
--Creatividad | |
--let nombres = ["Julio","Macarena","Lala","Delilah"] | |
--let apellidos = ["Pizarro","Gonzales","Cortez","Sierra"] | |
--conjuntoNombres = [x ++ " " ++ y | x <- nombres, y <- apellidos] | |
--Nota: let define a una lista | |
--Salida ["Julio Pizarro","Julio Gonzales","Julio Cortez","Julio Sierra","Macarena Pizarro"] etc | |
--Length' | |
length' xs = sum[1 | _ <- xs] | |
--Removenonuppercase | |
removeNonUpperCase st = [c | c <- st, c `elem` ['A'..'Z']] | |
--Entrada: removeNonUpperCase "HoLa" | |
--Salida "Hl" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment