ich eine Struktur Rationals (int * int) und einer meiner Funktionen bin erstellen:Wie eine Art in SML (wie Gießen) zwingen
fun diff ((n, d), (n', d')) = let val (top, bot) = sum ((n, d), (~n', d'))
in
(top/gcd(top, bot), bot/gcd(top, bot))
end
gcd gibt mir den größten gemeinsamen Nenner, so Ich habe nicht 2/8, sondern 1/4, wie es sein sollte. gcd benutzt mod um den gcd zu finden, also gibt es einen int zurück. Aber ich kann den Ausdruck mit Division nicht als Int interpretieren. Als ich versuchte, am Ende der Diff-Deklaration : int * int
hinzuzufügen, gibt es mir einen Typfehler, dass die Ausdrücke real * real und int * int nicht übereinstimmen.
Wie kann ich eine ganzzahlige Division erzwingen oder den Ausdruck in eine Ganzzahl umwandeln? Wenn beides möglich ist, welches ist besser?