Skip to content

Instantly share code, notes, and snippets.

@harpiechoise
Created June 3, 2017 01:43
Show Gist options
  • Save harpiechoise/3804d95af91bc6fefcc3a4164b8c86ab to your computer and use it in GitHub Desktop.
Save harpiechoise/3804d95af91bc6fefcc3a4164b8c86ab to your computer and use it in GitHub Desktop.
Si estas empezando en haskell esto te sera util
--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