Мне нужна функция, которая получает два Int
s ( a
и b
) и возвращает A/B
как Int
. Я уверен, что A/B
это всегда будет целое число.
Вот мое решение:
myDiv :: Int -> Int -> Int
myDiv a b =
let x = fromIntegral a
y = fromIntegral b
in truncate (x / y)
Но хочу найти более простое решение. Что-то вроде этого:
myDiv :: Int -> Int -> Int
myDiv a b = a / b
Как я могу разделить Int на Int и получить Int?
a `quot` b
для любителей инфиксов (вау, вы действительно можете избежать обратных кавычек в обратную косую черту?).a `div` b
; если я правильно помню,quot
обрезает (как и хотел демас) иdiv
округляет до нуля. Итак(-3) `quot` 4 == 0
, и(-3) `div` 4 == -1
.div
. С математической точки зрения лучше себя вести,quot
когда вокруг есть отрицательные числа.fromIntegral (ceiling (int1 / int2))
другими вещами - ни одно из них не вернуло мнеInt
, но это помогло.div
округляется к отрицательной бесконечности, а не к нулю.Вот что я сделал, чтобы сделать свое собственное:
quot' a b | a<b = 0 -- base case | otherwise = 1 + quot' a-b b
источник
a<0
), либо никогда не заканчивается (b<0
).