Saltar al contenido

División en Haskell

Por fin luego de mucho luchar hemos encontrado la respuesta de este atolladero que muchos usuarios de nuestra web presentan. Si tienes algún detalle que compartir puedes aportar tu conocimiento.

Solución:

Usar divque realiza la división de enteros:

halfEvens :: [Int] -> [Int]
halfEvens [] = []
halfEvens (x:xs) | odd x = halfEvens xs
                 | otherwise = x `div` 2 : halfEvens xs

los (/) La función requiere argumentos cuyo tipo sea de la clase Fractional y realice una división estándar. los div La función requiere argumentos cuyo tipo sea de la clase Integral, y realiza la división de enteros.

Más precisamente, div y mod redonda hacia el infinito negativo. Sus primos, quot y remse comporta como una división entera en C y se redondea hacia cero. div y mod suelen ser correctos al hacer aritmética modular (por ejemplo, al calcular el día de la semana dada una fecha), mientras que quot y rem son un poco más rápidos (creo).

Jugando un poco en GHCi:

> :t div
div :: Integral a => a -> a -> a
> :t (/)
(/) :: Fractional a => a -> a -> a
> 3 / 5
0.6
> 3 `div` 5
0
> (-3) `div` 5
-1
> (-3) `quot` 5
0
> [x `mod` 3 | x <- [-10..10]]
[2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1]
> [x `rem` 3 | x <- [-10..10]]
[-1,0,-2,-1,0,-2,-1,0,-2,-1,0,1,2,0,1,2,0,1,2,0,1]

Acuérdate de que tienes la capacidad de explicar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *