Ich brauche eine Funktion , die zwei bekommt Int
s ( a
und b
) und kehrt A/B
als Int
. Ich bin sicher, dass A/B
das immer eine ganze Zahl sein wird.
Hier ist meine Lösung:
myDiv :: Int -> Int -> Int
myDiv a b =
let x = fromIntegral a
y = fromIntegral b
in truncate (x / y)
Aber wollen einfachere Lösung finden. Etwas wie das:
myDiv :: Int -> Int -> Int
myDiv a b = a / b
Wie kann ich Int in Int teilen und Int erhalten?
a `quot` b
für die Infix-Liebhaber (wow, können Sie Backticks tatsächlich mit Backslash entkommen?).a `div` b
; Wenn ich mich richtig erinnere,quot
schneidet er ab (wie es Demas wollten) unddiv
rundet gegen Null. Also(-3) `quot` 4 == 0
und(-3) `div` 4 == -1
.div
. Mathematisch besser erzogen,quot
ist eine Hündin, wenn es negative Zahlen gibt.fromIntegral (ceiling (int1 / int2))
und anderen Dingen - keine davon gab mir eine zurückInt
, aber diese tat es.div
rundet auf negative Unendlichkeit, nicht auf Null.Folgendes habe ich getan, um mein eigenes zu machen:
quot' a b | a<b = 0 -- base case | otherwise = 1 + quot' a-b b
quelle
a<0
) oder endet nie (b<0
).