Dies ist eine Hausaufgabenfrage. In SML gibt es eine Grenze für Integer-Größe, die Int.maxInt ist, also muss ich ein Paket entwerfen, das große Ganzzahlen darstellen kann und Operationen wie Addieren, Multiplizieren usw. ausführen kann. Jetzt ist die offensichtliche Wahl, sich in a aufzuteilen Liste oder Array, wo jedes Element eine ganze Zahl von akzeptabler Größe hat. Aber definieren, wenn eine Funktion annehmen,SML: Modul für große Integer-Darstellung
IntToLargeInt(x, base) = (x mod base) :: IntToLargeInt(x div base , base)
Nun, für ganze Zahlen kleiner als die maximalen Größe, ist es zu einer Reihe von anderer Basis in einer Liste zu konvertieren. Aber mit großen Ganzzahlen, bevor es sogar aufteilen kann, löst es eine Überlauf-Ausnahme aus. Also, irgendein Hinweis, wie man vom Funktionsargument direkt wie ein stdin-Stream oder etwas Ähnliches analysieren kann. Im Grunde alles, was mir hilft, die Funktion für große Ganzzahlen arbeiten zu lassen.
Sollte ich Typen wie IntInf zuerst speichern und dann zu einer anderen Basis konvertieren?
Oder vielleicht, wenn ich in die falsche Richtung gehe, wären einige Hinweise darüber, wo ich anfangen soll, gut.
Ich werde den oben genannten Ansatz ausprobieren. Aber wenn ich dann ein ganzes Paket umsetzen muss, was ist der beste Weg? Gibt es Tutorials? –
Nicht ganz sicher, was Sie mit "ein ganzes Paket" meinen, da "Paket" kein SML-Begriff ist."Struktur" ist, aber ich vermute, dass Ihre Hausaufgaben bescheidener sind als eine vollwertige Struktur zu implementieren und stattdessen eine Sammlung von Funktionen zu schreiben, die es Ihnen ermöglicht, einfache Arithmetik für große ganze Zahlen zu machen. Das Darstellen solcher Dinge wie Listen von Ints ist natürlich (was durch einen Typ def abstrahiert werden kann, wenn Sie möchten). Angesichts dieser Darstellung sind Addition, Subtraktion und naive Multiplikation ziemlich einfach. Für die Potenzierung - verwende Potenzierung durch Quadrieren, die ein natürliches rekursives def. –
Ihr Fragentitel enthält das Wort "Modul", was darauf hindeutet, dass Sie möglicherweise eine Struktur implementieren müssen. Selbst dann ist der natürliche Weg zu gehen, zuerst eine Sammlung von einzelnen Funktionen zu erstellen, um die Arithmetik auf Ihren großen Ints zu tun, sie zu Strings, Strings usw. umzuwandeln und sie dann später in eine Struktur zu verpacken. –