Potrzebuję funkcji, która pobiera dwa Int
s ( a
i b
) i zwraca A/B
jako Int
. Jestem pewien, że A/B
zawsze będzie to liczba całkowita.
Oto moje rozwiązanie:
myDiv :: Int -> Int -> Int
myDiv a b =
let x = fromIntegral a
y = fromIntegral b
in truncate (x / y)
Ale chcę znaleźć prostsze rozwiązanie. Coś takiego:
myDiv :: Int -> Int -> Int
myDiv a b = a / b
Jak mogę podzielić Int na Int i otrzymać Int?
a `quot` b
dla miłośników wrostków (wow, faktycznie można uciec od odwrotnego znaku ukośnika do odwrotnego znaku?).a `div` b
; jeśli dobrze pamiętam,quot
obcina (tak jak chciał demas) idiv
zaokrągla w kierunku zera. Więc(-3) `quot` 4 == 0
i(-3) `div` 4 == -1
.div
. Bardziej grzeczny matematyczniequot
jest dziwką, gdy wokół są liczby ujemne.fromIntegral (ceiling (int1 / int2))
innymi rzeczami - z których żadna nie dała mi z powrotemInt
, ale ta się udało.div
zaokrągla w kierunku ujemnej nieskończoności, a nie zera.Oto, co zrobiłem, aby stworzyć własne:
quot' a b | a<b = 0 -- base case | otherwise = 1 + quot' a-b b
źródło
a<0
), albo nigdy się nie kończy (b<0
).