Como se saca la parte entera en funcional?
por ejemplo... en una funcion q recibe parametros de tipo Integer
quiero usar la parte entera de la raiz de un numero... como lo escribo?
Firma

Tema
Como se saca la parte entera en funcional?
por ejemplo... en una funcion q recibe parametros de tipo Integer
quiero usar la parte entera de la raiz de un numero... como lo escribo?

floor n 😄
Hay 10 tipos de personas en el mundo. Los que entienden binario, y los que no...
Hugs> takeWhile (/= '.') (show 423.1234)
"423"
😄
gracias 🙂
jajaja
nos dejaran usar algo como lo q puso eivanec?
(es un lambda abstraction lo q hiciste con el igual o mande fruta?)
jajaja si, es una lambda-abstraction parece, pero el takewhile es medio ilegal aca me parece XD
No, creo que no; takeWhile toma una función que devuelve Bool y una lista:
Hugs> :t takeWhile
takeWhile :: (a -> Bool) -> [a] -> [a]
Y /=, el "operador" de desigualdad, es por supuesto simplemente una función:
Hugs> :t (/=)
(/=) :: Eq a => a -> a -> Bool
Que no cumple el tipo requerido, pero agregando su primer parámetro...
Hugs> :t (/= '.')
flip (/=) '.' :: Char -> Bool
La reducción da bien. Magias de haskell, jaja. Por cierto lo que posteé es una gran mentira, por supuesto, ya que devuelve chars:
Hugs> :t (takeWhile (/= '.') (show 423.1234))
takeWhile (flip (/=) '.') (show 423.1234) :: Fractional a => [Char]
Creo que el lambda en Haskell es siempre , pero no me consta.
Saludos!
La parte entera se puede sacar usando floor, que creo q es totalmente legal usarla
Ejemplo:
floor 1.75
devuelve:
1
"If debugging is the process of removing bugs, then programming must be the process of putting them in." -- Dijkstra
Sí, esa fue la primera respuesta y la correcta! El resto fue un off-topic por aburrimiento y densidad mía, jaja. Saludos.
jaja, con tanto post me olvidé de que ya habían dicho esa respuesta, perdón por repetir y no leer! 😛
tengo una solucion alternativa... que esta buena cuando uno quiere hacer la funcion, y no utilizar las que vienen en el prelude....
parteentera :: Double -> Integer
parteentera n | n <= -1 = (-1) * laparteentera 0 (-n)
parteentera n | -1 < n && n < 1 = 0
parteentera n | n >= 1 = laparteentera 0 n
laparteentera :: Integer -> Double -> Integer
laparteentera x n | 0 > n = x-1
laparteentera x n | otherwise = laparteentera (x+1) (n-1)
obvio que es una forma... debe haber miles... y seguramente esta forma puede quedar mejor escrita... pero la idea está.... agarro un float, y le voy restando de a uno hasta que me de negativo... cuando llego a que me de negativo, devuelvo la cantidad de veces que le reste uno y listo....
espero que sirva de algo...
Solo para completar la idea de eivanec (y para enojar a dani q no le gusta q use cosas consideradas ilegales en la materia) :
entera :: Fractional a => a -> Integer
entera = read . takeWhile (/= '.') . show
Agarra un Float o Double y lo transforma a [Char] con el "show", desp le saca hasta el '.' y lo transforma de vuelta a Int con el "read".. el '.' es composicion de funciones
Siguiendo la misma idea, se puede sacar facil el reverso de un Integer:
reversoInt :: Integer -> Integer
reversoInt = read . reverse . show
Main> reversoInt 123456789
987654321
Nico? escribió:
Agarra un Float o Double y lo transforma a [Char] con el "show", desp le saca hasta el '.' y lo transforma de vuelta a Int con el "read".. el '.' es composicion de funciones
... las cosas q se ven acá.... xD
Sin duda burdo lo mío, no lo niego 😄
Editado 1 vez.
Perdón, no lo dije con el sentido de discriminar. Mejor lo edito así evitamos problemas.
Gracias por avisar!