UTNianos

Versión completa: Funciones haskell
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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 =P


De todas formas, grosa iniciativa =D
Eso se lo tenés que corregir a Fleischman =P
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.
Spoiler: Mostrar
positivosLista [] = []
positivosLista (x:xs)
|x>0 = x: positivosLista xs
|otherwise = positivosLista xs

--Sumar la longitud de una [] de palabras.
Spoiler: Mostrar
sumarLong [] = 0
sumarLong (x:xs) = length x + sumarLong xs

y en esta tengo una duda:
--La multiplicación de todos los elementos de una []
Spoiler: Mostrar
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


Off-topic:
Vivos, yo también quiero cursar con Alf. Lástima que el muy forro no da AM1, ni ADR, ni TGC. Debería dar todas las materias, a medida que se lo pido. Pero bue, es forro así =P
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 =D


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 ++ =P)

Off-topic:
bueno, en base al email de la Lic Fleischman, alguien que quiera ser la mitad de los integrantes del grupo de dos personas para entregar el TP1?
Busquen a alguno de los "quique boys" y sean FELICES! =)
URLs de referencia