Estoy cursando la materia los días lunes por la noche con la profesora Andrea Fleischman (ayudante: Uriel Myslev).
Decidí armar una lista de funciones haskell que vimos en clase hasta ahora.
Me pareció que podía ser de utilidad para alguno así que lo comparto.
Iré actualizando a medida que pasan las clases, pero el link del archivo va a seguir siendo el mismo.
Si desean contactarme:
Yahoo! Mail Gmail
Lista de funciones para Haskell
Facu, buenísima la iniciativa.
Fijate que por algún lado está la Guía de Lenguajes, que es más o menos un resumen de las funciones, predicados y mensajes copados que está bueno tener a mano para los parciales y finales (se pueden usar).
Salute!
Aaah buenisimo.
Gracias por el comentario y la info Desert69.
Algunas cosas para tener en cuenta:
tomar n xs
| n > 0 = head xs : tomar (n-1) (tail xs)
| otherwise = []
Esta función viene con haskell, se llama
take.
Ojo también con los pipes (las barras verticales de las guardas), tienen que estar a la misma altura y no al principio... Haskell es tabulado y bien puto en ese aspecto.
productoria (x:xs) = x * productoria (xs)
productoria [] = 1
Esta también viene con haskell, es
product.
esPrimo n = primoAux n (n-1)
esPrimo 1 = True
primoAux 1 _ = True
primoAux n i
| i == 1 = True
| mod n i == 0 = False
| otherwise = primoAux n (i-1)
Ahí no hace falta el caso base en la definición de esPrimo, porque no es recursivo, y si le mandás un 1 en esPrimo entra por el caso base de primoAux.
Y un tema de estilos, en lugar de primoAux yo le pondría esPrimo2 (porque tiene 2 parámetros), o esPrimo' (haskell acepta los ' en los nombres de las funciones).
Por otro lado, la mayoría de las funciones no te van a hacer falta la próxima clase, porque las podés hacer con orden superior
De todas formas, grosa iniciativa
Eso se lo tenés que corregir a Fleischman
Ichiluk,
Gracias por la revisión. Recién voy por la segunda clase y no conocía las funciones esas.
Igualmente las voy a dejar porque lo interesante también esta en ver como codearlas.
Arregle la linea innecesaria de esPrimo pero primoAux lo bautizó la profesora.
muchas gracias
mismo curso... no me gustó nada Fleischman
Shh! podría estar leyendo esto. Pero en realidad me gustaría estar cursando con Alf.
- Off-topic:
- Totalmente! igual nunca sabrá quién soy (?)
que no supiera usar el notepad, me puso nervioso...
Muy bueno lo de ir teniendo las funciones!
Ichiluk, si bien Haskeel ya tiene esas funciones, la idea era que viéramos cómo hacer los ejercicios sin usarlas
Aprovecho para hablar de la tarea:
--Dada una [] devolver otra [] con los n>0.
positivosLista [] = []
positivosLista (x:xs)
|x>0 = x: positivosLista xs
|otherwise = positivosLista xs
--Sumar la longitud de una [] de palabras.
sumarLong [] = 0
sumarLong (x:xs) = length x + sumarLong xs
y en esta tengo una duda:
--La multiplicación de todos los elementos de una []
produList [] = 1
produList (x:xs) = x * produList xs
--el problema es que si el producto de la lista vacía vale "0" (como corresponde), como toda lista es la concatenación de sus miembros con la lista vacía, me multiplica todo por "0", y me da siempre "0". Algua idea de cómo hacer que la lista vacía valga "0", pero que sea posible hacer el producto de todos los miembros de una lista?
Los primeros 2 están bien, son tal cual los puse en la tabla. El último yo lo puse igual prometiendo cambiarlo mas adelante y me olvide. una solución podría ser.
productoria [] = 0
productoria (x:xs) = produList (x:xs)
produList [] = 1
produList (x:xs) = x * produList xs
Si si, no hay problema. Pasa que es recursividad, y la verdad es que no vale la pena darle taaaaaaanta bola a la recursividad. Dale mas bola a composición, aplicación parcial, orden superior y expresiones lambda
Y si querés hacer recursividad y ver si entendiste, armate el append:
append [1,2,3,4] [5,6]
[1,2,3,4,5,6]
append [6,5,8] [1,2,4,7,5]
[6,5,8,1,2,4,7,5]
append "hola " "mundo"
"hola mundo"
(también viene con haskell, es la función ++
)
Busquen a alguno de los "quique boys" y sean FELICES!