13-12-2013, 22:35
Buenas gente, estaba haciendo un final de paradigmas y ante la aburrición me puse a pelotudear con Haskell. El tema es el siguiente
Yo hago
head ( filter ((==2).snd) [(1,5),(1,2)] )
Eso funca y me tira (1,2)
Ahora, digo, mejor me ahorro unos paréntesis y compongo head con filter
head . filter ((==2).snd) [(1,5),(1,2)]
Pero eso no funca, lo que para mi no tiene sentido ya que la definicion de (.) es
(.) f g = (\x -> f ( g x) )
Además el intérprete me tira el error en
(filter ((==2).snd)) [(1,5),(1,2)]
Pero si le tiro eso solo de consulta me tira el resultado correcto, por ende el head tendria que funcionar...
Entonces me puse a chusmear y encontré la funcion $ cuya definicion es:
$ f x = f x
Si hago
head . filter ((==2).snd) $ [(1,5),(1,2)]
Mágicamente funciona, y no entiendo por qué
Help?
pd: no se qué onda pero no me aparece en el editor para ponerle la etiqueta de código haskell
Yo hago
head ( filter ((==2).snd) [(1,5),(1,2)] )
Eso funca y me tira (1,2)
Ahora, digo, mejor me ahorro unos paréntesis y compongo head con filter
head . filter ((==2).snd) [(1,5),(1,2)]
Pero eso no funca, lo que para mi no tiene sentido ya que la definicion de (.) es
(.) f g = (\x -> f ( g x) )
Además el intérprete me tira el error en
(filter ((==2).snd)) [(1,5),(1,2)]
Pero si le tiro eso solo de consulta me tira el resultado correcto, por ende el head tendria que funcionar...
Entonces me puse a chusmear y encontré la funcion $ cuya definicion es:
$ f x = f x
Si hago
head . filter ((==2).snd) $ [(1,5),(1,2)]
Mágicamente funciona, y no entiendo por qué
Help?
pd: no se qué onda pero no me aparece en el editor para ponerle la etiqueta de código haskell