Necesito una función que obtenga dos Int
s ( a
y b
) y devuelva A/B
como Int
. Estoy seguro de que A/B
siempre será un número entero.
Aquí está mi solución:
myDiv :: Int -> Int -> Int
myDiv a b =
let x = fromIntegral a
y = fromIntegral b
in truncate (x / y)
Pero quiero encontrar una solución más sencilla. Algo como esto:
myDiv :: Int -> Int -> Int
myDiv a b = a / b
¿Cómo puedo dividir Int a Int y obtener Int?
a `quot` b
para los amantes de los infijos (guau, ¿puedes escapar de las comillas inversas en las comillas inversas con barra invertida?).a `div` b
; si mal no recuerdo,quot
trunca (como querían demasiados), ydiv
redondea hacia cero. Entonces(-3) `quot` 4 == 0
, y(-3) `div` 4 == -1
.div
. Más matemáticamente educado,quot
es una perra cuando hay números negativos alrededor.fromIntegral (ceiling (int1 / int2))
y otras cosas, ninguna de las cuales me devolvió unaInt
, pero esta sí.div
redondea hacia infinito negativo, no cero.Esto es lo que hice para hacer el mío:
quot' a b | a<b = 0 -- base case | otherwise = 1 + quot' a-b b
fuente
a<0
) o nunca termina (b<0
).